`
tou3921
  • 浏览: 68621 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

向大数据数据库中插入值时,还要判断插入是否重复,然后插入。如何提高效率

阅读更多
向大数据数据库中插入值时,还要判断插入是否重复,然后插入。如何提高效率。
每次insert时还要select下,现在数据库里的数据已有几十万条,这样批量插入的时候效率就会很低,不得不这么做,谁有好的方法。
想过把关键内容取来放在map或者list里,然后每次从集合里判断,可这样内存就吃不消了。
...........
分享到:
评论
63 楼 yao_2110 2008-09-12  
hocus 写道
做好索引,select count(*)来判断才是正道

如果是oracle,sql写做
select * from dual where exists (select * from 表名 where 条件)
这样会很快。
统计还需要出结果,上面这条语句会在找到第一条符合条件的数据时就返回。如果不出意外,时间<0.1秒。
62 楼 yao_2110 2008-09-12  
才几十万的数据量,加个唯一键不就解决了,怎么那么费劲,什么数据库啊??
61 楼 armorking 2008-09-12  
1、用batch方式插入到表结构相同的temp表,
这个temp表可以是实体表而不是临时表
insert into my_table_temp
...


2、用以下方式插入数据
insert into my_table
select a.*
from my_table_temp a
left join my_table b on
a.pk_1 = b.pk_1
and a.pk_2 = b.pk_2
...
where b.rowid is null

60 楼 igogo007 2008-09-12  
你的数据库难道不能设定为“唯一”?
59 楼 icewubin 2008-09-12  
卒子99 写道
vvgg 写道
hocus 写道
bluemeteor 写道
异常不是这么用滴!

做好索引,select count(*)来判断才是正道

我也同意
异常不应该被用于流程和业务逻辑判断





重复数据也可以看作一种异常吧


感觉有重复数据的几率远小于正常的几率,所以产生异常的代价和每次查询相比应该算小的。


写try catch,JVM在处理的时候,就是需要占用更多多资源了,不仅仅是发生异常以后


新版JVM的这个问题已经大大改善了,即使有的话,这个性能和数据库交互的开销比起来可以忽略的。
58 楼 卒子99 2008-09-12  
vvgg 写道
hocus 写道
bluemeteor 写道
异常不是这么用滴!

做好索引,select count(*)来判断才是正道

我也同意
异常不应该被用于流程和业务逻辑判断





重复数据也可以看作一种异常吧


感觉有重复数据的几率远小于正常的几率,所以产生异常的代价和每次查询相比应该算小的。


写try catch,JVM在处理的时候,就是需要占用更多多资源了,不仅仅是发生异常以后
57 楼 jyw 2008-09-12  
抛出异常的爱 写道
1. insert into temp

2. del temp where temp.id in (select temp.id from temp ,use where temp.value=use.value)

3. insert into use (value)values(select temp.value from temp group by temp.value)



和我的想法差不多
不过,我想在加一句
delete from temp
呵呵
56 楼 myhometel 2008-09-12  
学习学习学习学习
55 楼 ftplove 2008-09-12  
目的是往数据库插入批量数据,防止插入批量数据

我的想法是,先插入批量数据,然后删除重复的数据,保留其中一条
54 楼 weiqingfei 2008-09-12  
首先,像数据库插入数据时,数据库做了什么?

其次,异常是怎么抛出的?
53 楼 GFreedom 2008-09-12  
为什么非要放到数据库里面做?
52 楼 zhengzhong 2008-09-11  
merge into
51 楼 szhnet 2008-09-11  
还是用临时表吧
50 楼 danielTang 2008-09-11  
我一般都是直接用過程來進行的。感覺到效果應該能夠好一點吧
49 楼 kaka2008 2008-09-11  
tou3921 写道
那个集合适合百万数据啊,还是需要多个集合存储?


Map还行,List肯定不行了
48 楼 抛出异常的爱 2008-09-11  
1. insert into temp

2. del temp where temp.id in (select temp.id from temp ,use where temp.value=use.value)

3. insert into use (value)values(select temp.value from temp group by temp.value)
47 楼 xiaoyu 2008-09-11  
主要是先select count(*),再insert 中间有一个时间间隔,如果事务等级低(如果是搞的话,代价也会很大),就会有问题的。

一般我是这样:
try {
    insert....
} catch (...) {
   if (select count(*) > 0) {
       throw ....
   }

   throw ....
}
46 楼 tou3921 2008-09-11  
可能大家说的都有道理,我对于数据库、调优这方面不在行。
我试来下,目前采用了捕获异常的方式,也还蛮快的,重复数据毕竟不到10%。
还有从来没用过集合存储百万数据,刚试了下,main报错了。那个集合适合百万数据啊,还是需要多个集合存储?
45 楼 zhajie 2008-09-11  
抛出异常的爱 写道
zhajie 写道
看重复机率的问题

如果重复机率小于50%

百分之一万
应该使用捕获异常,
这是最优雅,
最体现java优点,
最符合逻辑的处理方式..

高效<>优雅


效率瓶颈主要在数据库,而不是应用,

简单的数据库并且尽量减少对数据库的访问,才能获得高效.
44 楼 抛出异常的爱 2008-09-11  
zhajie 写道
看重复机率的问题

如果重复机率小于50%

百分之一万
应该使用捕获异常,
这是最优雅,
最体现java优点,
最符合逻辑的处理方式..

高效<>优雅

相关推荐

    几种数据库的大数据批量插入

    特别是在处理大量数据时,批量插入可以大大提高数据库的写入效率。今天,我们将讨论几种数据库的大数据批量插入,包括 Oracle 和 SqlServer。 首先,让我们来看一下 IBatcherProvider 接口。这个接口是用于实现批量...

    C#大数据批量插入Access程序

    本程序" C#大数据批量插入Access程序 "就是针对这种需求而设计的,它允许开发者高效地将大量数据导入到Access数据库中。 Access数据库虽然在处理大规模数据时可能不如SQL Server等大型数据库系统强大,但在某些场景...

    ORACLE数据库中插入大字段数据的解决方法

    在ORACLE数据库中插入大字段数据时,可能会遇到性能问题或者由于字段长度限制导致的错误。这类问题通常涉及LOB(Large Object)类型的字段,如CLOB(Character Large Object)和BLOB(Binary Large Object)。本篇...

    insert和select结合实现”插入某字段在数据库中的最大值+1″的方法

    本文是mysql 数据库 问题一 将表一的数据导入表二...在表中插入数据时,某一字段取数据库中该字段的最大值,并+1,这个问题很多人都说用存储过程什么的解决,其实使用insert 和 select 结合就可以很好的解决这个问题啊

    Sqlite数据库里插入数据的条数上限是500

    今天在向Sqlite数据库里插入数据的时候,报了这样一个错: 代码如下: “too many terms in compound SELECT” 去Stackoverflow上查了一下,发现有人回答这个问题:链接 原来一次性向数据库里插入数据的条数不能太...

    c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql)

    在C#中,进行大数据批量插入到不同的数据库如SQL Server、Oracle、SQLite和MySQL时,开发者需要考虑每个数据库系统的特性和API。以下是对这四种数据库批量插入操作的详细讲解: 1. **SQL Server批量插入** SQL ...

    c#实现几种数据库的大数据批量插入

    在C#中,可以创建一个事务,然后在一个循环中插入多条记录,确保所有插入都在一个事务中执行,以提高效率。 4. MySQL数据批量插入: MySQL也支持批量插入,可以使用`MySqlBulkLoader`类。创建这个类的实例,设置...

    Sqlserver大数据量插入速度慢或丢失数据的解决方法

    面对SQL Server在大数据量插入时出现的速度慢及数据丢失的问题,可以通过使用函数进行批量插入或采用BULK INSERT等命令来提高插入效率和数据完整性。这两种方法各有优缺点,根据实际情况选择合适的方案可以有效提升...

    C# Access 大数据量 批量 效率 快速 导入

    在C#中,可以创建一个DataSet或DataTable来存储待插入的数据,然后一次性将这些数据提交到数据库,显著提高导入速度。 以下是一些实现这一目标的关键知识点: 1. **批处理操作**:批处理是指一次性处理多个数据库...

    socket 大数据并列接收存数据库小列子(带多线程模拟数据)

    在处理大数据时,可能需要考虑分片(Sharding)、分区(Partitioning)或者批量插入(Bulk Insert)等策略,以提高写入效率和查询性能。此外,事务的正确性和一致性也很重要,尤其是在多线程环境下,需要确保数据的...

    vs自带数据库sql server的中文插入乱码问题、查找当前数据库名

    解决两个问题:vs自带数据库sql server的中文插入乱码问题、查找当前数据库名 (查找数据库名在文章中间,自己往下翻吧,不单拎出来了) vs自带数据库sql server的中文插入乱码问题: 如图所示,我插入表的中文变成...

    kettle对数据分表插入

    例如,我们可以计算输入数据的某个字段的哈希值,然后根据这个哈希值的模运算结果确定数据应该插入的子表。 哈希算法在这里起到了关键作用。常见的哈希函数如MD5、SHA-1等可以将任意大小的数据映射为固定长度的哈希...

    大数据领域的数据库有哪些分类

    在批处理数据库中,数据通常会被预先加载到内存中,然后通过并行计算的方式进行处理,从而大大提高了数据处理的速度。 - **例子**: Hive、Apache Pig等都是批处理数据库的代表。 **2. 流式处理数据库** - **特点**...

    上传文件及将大数据写入数据库并通过页面访问

    为了提高性能和减少内存占用,可以考虑使用分批次插入或者利用数据库自身的批量插入功能。 ### 四、通过页面访问已上传的数据 #### 4.1 查询数据库 使用SQL查询语句从数据库中检索已上传的文件信息。可以创建一个...

    JDBC批量插入 更新 删除等操作

    批量操作是指在一次数据库连接中执行多次SQL语句的操作,这种方式能显著提高程序性能,尤其是在处理大量数据时。 **批量插入**主要用于数据导入和日志记录等场景。例如,在日志系统中,通常会将日志信息先写入到...

    详细讲解提高数据库查询效率的实用方法

    21. **批量插入数据**:当需要大量插入数据时,采用批量插入的方式可以显著提高效率。 22. **优化删除操作**:在删除大量数据时,应避免一次性删除过多数据,可以考虑分批删除。 23. **合理使用存储过程**:存储...

    jdbc批量插入大字段

    在Oracle数据库中,Blob类型用于存储大量的二进制数据...总之,批量插入大字段是处理大量Blob数据的关键策略,通过JDBC提供的批处理功能,结合合理的事务管理和内存管理,可以显著提升Oracle数据库中的大数据插入效率。

    大数据知识点mysql数据库

    MySQL 数据库知识点总结 MySQL 是一种关系型数据库管理系统,目前版本为 5.7。在学习 MySQL 之前,需要了解数据库的发展阶段:人工阶段、文件系统阶段和数据库阶段。常见的主流数据库有 MySQL、Oracle、SQL Server ...

Global site tag (gtag.js) - Google Analytics