论坛首页 Java企业应用论坛

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

浏览 77137 次
精华帖 (8) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (8)
作者 正文
   发表时间:2008-09-09  
hocus 写道
bluemeteor 写道
异常不是这么用滴!

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

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





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


感觉有重复数据的几率远小于正常的几率,所以产生异常的代价和每次查询相比应该算小的。
2 请登录后投票
   发表时间:2008-09-09  
vvgg 写道
hocus 写道
bluemeteor 写道
异常不是这么用滴!

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

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


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

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

重复数据是一种业务逻辑,怎么是异常了。能用简单判断语句解决问题就绝不能用异常解决问题,这点道理都不明白吗?异常别滥用。
0 请登录后投票
   发表时间:2008-09-09  
vvgg 写道
hocus 写道
bluemeteor 写道
异常不是这么用滴!

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

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





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


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

重复数据是否看做异常状态,完全取决与业务
0 请登录后投票
   发表时间:2008-09-09  
我觉得得取决于你的重复的概率有多大,如果概率非常小的话,建议用异常来处理,如果比较大的话还是采取查询后再插入
0 请登录后投票
   发表时间:2008-09-09  
Oracle自带的 merge into 语句,不知道是否符合楼主的要求。
0 请登录后投票
   发表时间:2008-09-09  
先select进行判断,再进行insert,串行化事务,效率怎样没试过。
0 请登录后投票
   发表时间:2008-09-09  
根据你insert的频率和一次性insert的数据量来判断:如果频率不快(比如一天一次),可以采取先select再insert,如果数据量大的话,可以select的时候拼in来批量取。如果频率很快的话,建议还是把关键字保存在内存或memcached中吧,几十万条的数据量应该不大吧,主要的关键字放在内存中应该不会有问题吧(假设一个key占100b(很大了吧),100w个key也只有不到100M啊)。
1 请登录后投票
   发表时间:2008-09-10  
MeteorX 写道
Oracle自带的 merge into 语句,不知道是否符合楼主的要求。

merge into肯定不行,比如注册用户时,岂不是要update掉之前的用户?
0 请登录后投票
   发表时间:2008-09-10  
说了太多废话

1.先select,再insert,消耗多少时间?
2.先insert,判断异常,消耗多少时间?

如果重复的键上有索引,开销多少时间?

之所以重复,就是说明这些字段上需要有唯一性,已经是业务含义的主键了,建立索引是理所应当的。

没数据,莫空谈

最好先在表中插入100万条记录,写个程序,测试下。半天就肯定搞定了

0 请登录后投票
   发表时间:2008-09-10  
前段时间我们的一个项目,经常需要一次导入10-50w的数据,我们的解决办法是:
1.对数据建立唯一索引
2.将数据转换为csv/text文件格式
3.通过java 调用sqlloader直接导入

性能基本上能满足我们的要求,该解决方法缺点:
1.需要在应用服务器端安装ORACLE CLIENT
0 请登录后投票
论坛首页 Java企业应用版

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