精华帖 (8) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (8)
|
|
---|---|
作者 | 正文 |
发表时间:2008-09-11
xly_971223 写道 bluemeteor 写道 异常不是这么用滴!
做好索引,select count(*)来判断才是正道 扯!! 楼主的情况下一定要进攻式编程, 假设不存在重复 直接插入,如果出异常表示存在重复 select count(*)方式 是防御编程不适合用在这种情况 当然还要考虑重复的比率,上面的方法适合重复比较少的情况 赞同。。。 |
|
返回顶楼 | |
发表时间:2008-09-11
xly_971223 写道 bluemeteor 写道 异常不是这么用滴!
做好索引,select count(*)来判断才是正道 扯!! 楼主的情况下一定要进攻式编程, 假设不存在重复 直接插入,如果出异常表示存在重复 select count(*)方式 是防御编程不适合用在这种情况 当然还要考虑重复的比率,上面的方法适合重复比较少的情况 朋友,是和否你都说了,到底谁更能扯.... 如果你是程序员,那你想进攻就进攻,想防守就防守。 但如果你是架构师,你需要去问问你的DBA,一个数据库的完整性异常都意味着什么,然后顺带问问DBA一次做了索引的select count(*)都做了什么。 |
|
返回顶楼 | |
发表时间:2008-09-11
bluemeteor 写道 xly_971223 写道 bluemeteor 写道 异常不是这么用滴!
做好索引,select count(*)来判断才是正道 扯!! 楼主的情况下一定要进攻式编程, 假设不存在重复 直接插入,如果出异常表示存在重复 select count(*)方式 是防御编程不适合用在这种情况 当然还要考虑重复的比率,上面的方法适合重复比较少的情况 朋友,是和否你都说了,到底谁更能扯.... 如果你是程序员,那你想进攻就进攻,想防守就防守。 但如果你是架构师,你需要去问问你的DBA,一个数据库的完整性异常都意味着什么,然后顺带问问DBA一次做了索引的select count(*)都做了什么。 没必要嚼舌头. 作个表试一下不就行了? |
|
返回顶楼 | |
发表时间:2008-09-11
看重复机率的问题
如果重复机率小于50% 百分之一万 应该使用捕获异常, 这是最优雅, 最体现java优点, 最符合逻辑的处理方式.. |
|
返回顶楼 | |
发表时间:2008-09-11
zhajie 写道 看重复机率的问题
如果重复机率小于50% 百分之一万 应该使用捕获异常, 这是最优雅, 最体现java优点, 最符合逻辑的处理方式.. 高效<>优雅 |
|
返回顶楼 | |
发表时间:2008-09-11
抛出异常的爱 写道 zhajie 写道 看重复机率的问题
如果重复机率小于50% 百分之一万 应该使用捕获异常, 这是最优雅, 最体现java优点, 最符合逻辑的处理方式.. 高效<>优雅 效率瓶颈主要在数据库,而不是应用, 简单的数据库并且尽量减少对数据库的访问,才能获得高效. |
|
返回顶楼 | |
发表时间:2008-09-11
可能大家说的都有道理,我对于数据库、调优这方面不在行。
我试来下,目前采用了捕获异常的方式,也还蛮快的,重复数据毕竟不到10%。 还有从来没用过集合存储百万数据,刚试了下,main报错了。那个集合适合百万数据啊,还是需要多个集合存储? |
|
返回顶楼 | |
发表时间:2008-09-11
主要是先select count(*),再insert 中间有一个时间间隔,如果事务等级低(如果是搞的话,代价也会很大),就会有问题的。
一般我是这样: try { insert.... } catch (...) { if (select count(*) > 0) { throw .... } throw .... } |
|
返回顶楼 | |
发表时间: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) |
|
返回顶楼 | |
发表时间:2008-09-11
tou3921 写道 那个集合适合百万数据啊,还是需要多个集合存储?
Map还行,List肯定不行了 |
|
返回顶楼 | |