`
  • 浏览: 27130 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

请教,需要处理的数据量太大怎么办?

阅读更多

请教,需要处理的数据量太大怎么办?

情况是这样的:
数据库中有几个表,
每个表记录都超过10万条,
在查询时需要交叉连接查询(outer join)三个表,这就造成数据库会生成一千万条以上记录的情况,所以这样每查询一次都需要两秒以上时间.像这样的查询客户每次请求都需要执行好几百次,所以要等十几分钟才能结束.

有什么样的方法可以让数据库运行速度快一点吗?
数据库结构是不可以修改的.

这是为一个特种行业做科学计算的程序,以后数据量还在不断增大,数据库PSQL安装在LINUX系统上面内存2G,CUP3.0,服务器硬盘.

分享到:
评论
24 楼 shaucle 2006-12-22  
几十万条本来就是小数据.

俺这里有几个几千万的,俺同事现做的有几亿.

用索引的话,几千万的查询也是ms级别
但没架构好的话,几十万条的也会出现等待几个小时的(比如toplink乱用产生迭代)

关键还是架构!
23 楼 aunox 2006-12-12  
数据库层面:
1、统计使用最多的SQL的关键字段,然后根据需要进行索引加快速度(索引字段顺序和查询SQL语句where后面的条件顺序对检索速度影响也是有很大的关系)
2、设计表时不一定把一个完整对象信息作为一行来建表保存,考虑分拆表,虚关联就可以了
3、数据随着时间增加比较快的表可以考虑按照时间分表或者是给数据库进行分区,根据关键字或者是时间进行分区都是可以的
4、查看数据库检索的cache命中率,调整查询内存大小,提高cache命中率,数据库其他方面的配置都可以根据实际使用情况进行调整优化摸索

程序设计层面:
1、根据数据变化频度进行必要的cache对加快速度也是很好的,效果立竿见影
2、如果是可能的话,最好是能根据不同的条件生成静态HTML文件,这种效果最好,不过就看实际情况了能不能这样了
22 楼 clmwy 2006-12-11  
服务器的配置有点低了.SQL可能也要优化一下.可以看一下优化SQL这方面的资料.
21 楼 cuihz.hibernate 2006-12-11  
可以考虑一下用索引技术来解决。lucene
20 楼 byk 2006-12-11  
解决方案:
1,优化索引
2,使用存储过程
3,使用中间结果集,把一些固定的数字提前算好
19 楼 rf_wu 2006-12-11  
如果只是搜索的话,
用lucene?
18 楼 林秋枫 2006-12-11  
一个表才10万条数据量谈不上大。
目前做的系统,超过2000万条记录的表有几个,超过300万条记录的表也听多的。
没有用hibernate那种恶心的东西,直接用jdbc。
17 楼 2006-12-11  
多谢各位.
大家说得都很对.
16 楼 together 2006-12-11  
同时查询几百次,神仙也救不了你。
把个专家帮你们把系统优化一下吧,效率提高一二个数量级是完全可能的。
这个应该挪到综合技术版去吧
15 楼 presses 2006-12-10  
    一个表10万条记录左右,有几个表,所以记录只有几十万条。全部实例化放到Map里头,两G内存免强应该够。但处理过程中产生的对像就要处理好。不记得sun的jvm的堆最大能调多少。好像也是一G多。或者考虑只把两个表全部放在内存里,速度应该也提高不少。
14 楼 piliskys 2006-12-10  
设计重于优化
13 楼 dragonsoar 2006-12-09  
你得用个搜索的引挚之类的,要不是不行的,从数据库上解决不了~
12 楼 player 2006-12-09  
在查询时需要交叉连接查询(outer join)三个表,这就造成数据库会生成一千万条以上记录的情况,所以这样每查询一次都需要两秒以上时间.像这样的查询客户每次请求都需要执行好几百次,所以要等十几分钟才能结束.

感觉是“每次执行都需要执行好几百次“的问题,如果你每次执行一个sql好几百次,还是把它转换成一个存储过程什么的,还好些
11 楼 qinysong 2006-12-08  
小几十万条数据并不算多,如果数据库设计范式级别较高,采用左外联且联接字段为主/外键或索引的话,性能应该也没有问题,且并不会造成千万的纪录数量。
从直觉来说,用户一次操作要进行这样的几百次执行,我感觉这可能是最有优化空间的地方。
当然我只是估计,因为你给的信息还是很少
10 楼 bigpanda 2006-12-08  
thebestwish@msn.com 写道
不是全部交叉,只是左外连接.

顺便说一下 4楼叫 ddandyy 形象照片好漂亮呀,是您本人吗?


不是。ddandyy兄弟最喜欢用漂亮妹妹的头像。
9 楼 janh 2006-12-08  
要查询几百次的话肯定慢,不能合并到一起吗?大数据量的话最主要的是硬盘速度,可以提高硬盘系统的速度试试。
8 楼 2006-12-08  
不是全部交叉,只是左外连接.

顺便说一下 4楼叫 ddandyy 形象照片好漂亮呀,是您本人吗?
7 楼 LucasLee 2006-12-08  
为什么是外连接?看上去还是full outer join,真有必要这么做么?
把你的理由说来听听。
如果可以,不要做full outer join,很慢。
6 楼 ddandyy 2006-12-08  
做业务上的调整
5 楼 2006-12-08  
数据库可以做成分布式的吗?

花钱一向是客户最不喜欢听到的,所以换个更大更贵的,暂先不考虑.

用磁盘列阵,加快读盘速度,上多个CPU,也是可以的,但我还想多知道点别的.

相关推荐

Global site tag (gtag.js) - Google Analytics