程序优化贴

hiei 2007-08-08 03:50:12
做一个电信统计业务.
每次对500万条测试数据进行统计.
我的设计流程是这样的.
由于是单线程
我只创建了一个单例的jdbc连接
从数据源处每次读取N条数据入缓存中
我的缓存设为一静态变量,是一个LinkedList
当缓存中需要统计的数据达到M条时,进行数据库存储操作

这个数据库存储操作每次要做一个判断是否存在或者按月计算是否已存在的数据库查询,
如果不存在,则添加做insert操作
存在则做update操作

测试下来,每次读取5000条数据,缓存数据是1000条,对100万条的统计时间是2个小时,速度很慢,因为即要做数据库查询,又要做存储。

各位有什么好的优化经验给我讲一讲。
如,缓存的集合形式等
或者优化程序流程、数据库存储

...全文
682 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
glseda 2007-08-26
  • 打赏
  • 举报
回复
数据库可以做的事情,最好别用程序做,
统计这个事情数据库完全可以做好,而且速度相当快
fashi1000 2007-08-24
  • 打赏
  • 举报
回复
能用存储过程的千万别用程序
找找 做过报表的人 他们会告诉你很多方法
kqw1981 2007-08-18
  • 打赏
  • 举报
回复
学习,
zapdos 2007-08-18
  • 打赏
  • 举报
回复
如果是mysql
可以用replace代替insert或update
如果已存在,会自动改用update的
niko7 2007-08-18
  • 打赏
  • 举报
回复
第一:在数据进入缓存队列时,可以启动并发机制去数据库中确定其状态,到底是insert还是update;
第二:数据库中的存放,可以按时间切割,实现分段存放。
gui0605 2007-08-17
  • 打赏
  • 举报
回复
jf
deng1234 2007-08-17
  • 打赏
  • 举报
回复
,如每月或每天的测试数据存入不同的表

事实上是这样实现的,
yangxccom 2007-08-15
  • 打赏
  • 举报
回复
原则是尽量少的去访问数据库.在判断是否存在或者按月计算是否已存在的地方可做些优化,把要比较的数据缓存在TreeSet中,当然要看数据有多大,能否缓存得了,和怎样去维护TreeSet中的数据
zjf405 2007-08-15
  • 打赏
  • 举报
回复
支持
buctreny 2007-08-14
  • 打赏
  • 举报
回复
我个人觉得,应该将数据导入,然后,你的任务就完成了。剩下的事情交给数据库做吧!我觉得数据中写存储过程操作,应该比程序中操作要快很多。
struts2 2007-08-14
  • 打赏
  • 举报
回复
1 能不能用多线程实现?
LinkedList当成队列,后台进程查询队列做相应的操作?
相应的数据库链接池中必须多方几个链接,至于几个最快,测试看看吧。
不会加快实际速度,但是看起来会快点

2 是否需要合理调整M的大小?

3 能否将数据苦衷500万条数据的表根据日期(或者其他字段)做成不同的view,是否能提高查询性能?

我觉得单链接是性能的瓶颈!
愤怒的小蒋 2007-08-13
  • 打赏
  • 举报
回复
跟着学习吧
jojobb3138688 2007-08-08
  • 打赏
  • 举报
回复
哎`我是没格说了`我还没做过这样大的业务`在此学习来了`
hiei 2007-08-08
  • 打赏
  • 举报
回复
楼上的好主意啊,可以试一下,但是关联500万条的数据,会不会很耗费性能
ttjacky 2007-08-08
  • 打赏
  • 举报
回复
能不能先从数据源将数据一股脑儿存到一个临时表中,(省略查询过程了),然后在数据库这端用SQL关联两个表来Update已经存在的数据,然后再调用一个insert into ...select .. from的语句完成不存在的数据的Insert。 速度应该能快一半以上。
ochinchina 2007-08-08
  • 打赏
  • 举报
回复
合理设计数据库表,如每月或每天的测试数据存入不同的表

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧