论坛首页 Java企业应用论坛

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

浏览 77107 次
精华帖 (8) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (8)
作者 正文
   发表时间:2008-09-10  
这个问题我也遇到了 目前我就是采用 先插后改的方法 我想目前几W的数据还是能够负载的吧
而且这个表也只有3、4列关联数据 我用PGSQL
0 请登录后投票
   发表时间:2008-09-10  
可以利用BerkeleyDB,他是一个map,以key-value值存放在文件里面。能够很快的查询。
0 请登录后投票
   发表时间:2008-09-10  
tou3921 写道
向大数据数据库中插入值时,还要判断插入是否重复,然后插入。如何提高效率。
每次insert时还要select下,现在数据库里的数据已有几十万条,这样批量插入的时候效率就会很低,不得不这么做,谁有好的方法。
想过把关键内容取来放在map或者list里,然后每次从集合里判断,可这样内存就吃不消了。
...........

插入一个临时表.....
之后用一个job
当有重复不动
无重复,插入并删除


这个东西很好写,比java用网络来端口通信快多了.
我以前也写过
1 请登录后投票
   发表时间:2008-09-10  
wolfbrood 写道


方法1:就是先把数据插入一个临时表,然后通过sql找出临时表里面哪些数据在正式表里面没有,然后把这些数据插入正式表。至于怎么找没有重复的数据那就是你的事,数据库存储过程可以完成,也可以写程序一条一条的读出。
这个方法避免了每次插入都要查找一次,但不一样的数据就要插入两次。至于效率问题你可以自己慢慢调优。



这个方法应该是最好的之一
0 请登录后投票
   发表时间:2008-09-10  
jiming 写道
wolfbrood 写道


方法1:就是先把数据插入一个临时表,然后通过sql找出临时表里面哪些数据在正式表里面没有,然后把这些数据插入正式表。至于怎么找没有重复的数据那就是你的事,数据库存储过程可以完成,也可以写程序一条一条的读出。
这个方法避免了每次插入都要查找一次,但不一样的数据就要插入两次。至于效率问题你可以自己慢慢调优。



这个方法应该是最好的之一


补充一下,应该用批量 sql 来做,不要使用游标一条一条的操作
0 请登录后投票
   发表时间:2008-09-10  
vvgg 写道
hocus 写道
bluemeteor 写道
异常不是这么用滴!

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

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





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


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


你怎么知道代价小,如果你实现一个数据库的异常,你会如何操纵数据,几种方法本质上还不是一样,无非就是看哪种方法能得到数据库的优化效率更高而已,楼上有位已经说过了,自己测一下很快就能得到结论,我认为效率应该是差不多的。

还有这种数据库异常不比Java异常,不同数据库的异常在不同jdbc驱动上表现出来的形式往往是很不一样的,建议不要依赖这种数据库异常为妙。
0 请登录后投票
   发表时间:2008-09-10  
还真热闹,看了这么多建议,我都有点晕了。
目前情况是:
数据库是oracle,此表只增补删。
一天可能要导入10-20个excel,每个差不多有5000-10000数据,重复数据是必须要过滤的。
20W次的过滤select和insert
或20W次中的10%次异常
或20W次的触发器
或者其他方法.....
0 请登录后投票
   发表时间:2008-09-10  
cenwenchu 写道
update,命中为0,就insert

支持
0 请登录后投票
   发表时间:2008-09-10  
tou3921 写道
还真热闹,看了这么多建议,我都有点晕了。
目前情况是:
数据库是oracle,此表只增补删。
一天可能要导入10-20个excel,每个差不多有5000-10000数据,重复数据是必须要过滤的。
20W次的过滤select和insert
或20W次中的10%次异常
或20W次的触发器
或者其他方法.....


这样的需求应该考虑试用ETL工具
像kettle
很简单的
0 请登录后投票
   发表时间:2008-09-10  
freeric 写道
cenwenchu 写道
update,命中为0,就insert

支持

这样的话,90%到命中都是1,10%命中0才insert。
这样的话,每条数据还是要对数据库执行两次操作
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics