精华帖 (8) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (8)
|
|
---|---|
作者 | 正文 |
发表时间:2008-09-10
这个问题我也遇到了 目前我就是采用 先插后改的方法 我想目前几W的数据还是能够负载的吧
而且这个表也只有3、4列关联数据 我用PGSQL |
|
返回顶楼 | |
发表时间:2008-09-10
可以利用BerkeleyDB,他是一个map,以key-value值存放在文件里面。能够很快的查询。
|
|
返回顶楼 | |
发表时间:2008-09-10
tou3921 写道 向大数据数据库中插入值时,还要判断插入是否重复,然后插入。如何提高效率。
每次insert时还要select下,现在数据库里的数据已有几十万条,这样批量插入的时候效率就会很低,不得不这么做,谁有好的方法。 想过把关键内容取来放在map或者list里,然后每次从集合里判断,可这样内存就吃不消了。 ........... 插入一个临时表..... 之后用一个job 当有重复不动 无重复,插入并删除 这个东西很好写,比java用网络来端口通信快多了. 我以前也写过 |
|
返回顶楼 | |
发表时间:2008-09-10
wolfbrood 写道 方法1:就是先把数据插入一个临时表,然后通过sql找出临时表里面哪些数据在正式表里面没有,然后把这些数据插入正式表。至于怎么找没有重复的数据那就是你的事,数据库存储过程可以完成,也可以写程序一条一条的读出。 这个方法避免了每次插入都要查找一次,但不一样的数据就要插入两次。至于效率问题你可以自己慢慢调优。 这个方法应该是最好的之一 |
|
返回顶楼 | |
发表时间:2008-09-10
jiming 写道 wolfbrood 写道 方法1:就是先把数据插入一个临时表,然后通过sql找出临时表里面哪些数据在正式表里面没有,然后把这些数据插入正式表。至于怎么找没有重复的数据那就是你的事,数据库存储过程可以完成,也可以写程序一条一条的读出。 这个方法避免了每次插入都要查找一次,但不一样的数据就要插入两次。至于效率问题你可以自己慢慢调优。 这个方法应该是最好的之一 补充一下,应该用批量 sql 来做,不要使用游标一条一条的操作 |
|
返回顶楼 | |
发表时间:2008-09-10
vvgg 写道 hocus 写道 bluemeteor 写道 异常不是这么用滴!
做好索引,select count(*)来判断才是正道 我也同意 异常不应该被用于流程和业务逻辑判断 重复数据也可以看作一种异常吧 感觉有重复数据的几率远小于正常的几率,所以产生异常的代价和每次查询相比应该算小的。 你怎么知道代价小,如果你实现一个数据库的异常,你会如何操纵数据,几种方法本质上还不是一样,无非就是看哪种方法能得到数据库的优化效率更高而已,楼上有位已经说过了,自己测一下很快就能得到结论,我认为效率应该是差不多的。 还有这种数据库异常不比Java异常,不同数据库的异常在不同jdbc驱动上表现出来的形式往往是很不一样的,建议不要依赖这种数据库异常为妙。 |
|
返回顶楼 | |
发表时间:2008-09-10
还真热闹,看了这么多建议,我都有点晕了。
目前情况是: 数据库是oracle,此表只增补删。 一天可能要导入10-20个excel,每个差不多有5000-10000数据,重复数据是必须要过滤的。 20W次的过滤select和insert 或20W次中的10%次异常 或20W次的触发器 或者其他方法..... |
|
返回顶楼 | |
发表时间:2008-09-10
cenwenchu 写道 update,命中为0,就insert
支持 |
|
返回顶楼 | |
发表时间:2008-09-10
tou3921 写道 还真热闹,看了这么多建议,我都有点晕了。
目前情况是: 数据库是oracle,此表只增补删。 一天可能要导入10-20个excel,每个差不多有5000-10000数据,重复数据是必须要过滤的。 20W次的过滤select和insert 或20W次中的10%次异常 或20W次的触发器 或者其他方法..... 这样的需求应该考虑试用ETL工具 像kettle 很简单的 |
|
返回顶楼 | |
发表时间:2008-09-10
freeric 写道 cenwenchu 写道 update,命中为0,就insert
支持 这样的话,90%到命中都是1,10%命中0才insert。 这样的话,每条数据还是要对数据库执行两次操作 |
|
返回顶楼 | |