Oracle 提高效率问题

灵犀Sword 2010-07-19 11:39:05
最近在做一个项目,对数据的插入效率要求很高..比如每一秒就会有1000条数据需要插入数据库中。同时在插入数据时有大量的业务逻辑..比如对传入数据中字符的处理 截取等.主要是想知道 需要使用什么方式来提高插入数据的性能!jdbc 队列处理? 还是存储过程?或者还有其他好的方式
...全文
202 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
becameaeagle 2010-07-20
  • 打赏
  • 举报
回复
学习学习
能不能做点触发器来减少业务逻辑处理?
fengshuo11 2010-07-20
  • 打赏
  • 举报
回复
采用存储过程比较适合
灵犀Sword 2010-07-20
  • 打赏
  • 举报
回复
不只是单单的插入 在插入前做业务逻辑 也是一部分...业务逻辑的时间是减少不了了 但是尽量提高插入数据库的效率 才是重点 今天测试了 下 同时有10000台客户端 就有问题了
  • 打赏
  • 举报
回复
1 秒 1000 条只是个估计值,根据我的经验这种估计值比实际偏大 10 倍。
  • 打赏
  • 举报
回复
也要注意硬件,这么高的IO, 保持网络 硬盘 系统,内存的 负载
最后肯定还是空间换时间
大量缓存,快照,分时间段,多级查询等等
landyshouguo 2010-07-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 dinghun8leech 的回复:]
引用 6 楼 cooljia 的回复:
1. 使用多线程,在应用程序中将字符操作提前处理掉,简化oracle sql语句
2. 采用批量提交,避免每一个数据操作一个commit动作

我倒是觉得,通常字符串处理的速度远高于与数据库交互的速度,而数据入库肯定只能排队一个个来,因此此处使用多线程,似乎也只能让准备入库的数据队伍排的长点儿罢了,呵呵。
批量提交也是我能想到的唯一办法。嘿嘿。
……
[/Quote]
存储过程还是很合理的
xuyang840117 2010-07-20
  • 打赏
  • 举报
回复
业务逻辑 可以在程序中处理,然后在插入数据库

1秒钟插入10000条? 这个有点夸张吧
你查询10000需要多久啊

还是插入临时表,然后在存储还是 ds 什么的 批量处理吧
淅沥加油 2010-07-20
  • 打赏
  • 举报
回复
不懂,来学习
laukie 2010-07-20
  • 打赏
  • 举报
回复
推荐使用存储过程,
goalboy118 2010-07-20
  • 打赏
  • 举报
回复
3楼的回答有道理
macower 2010-07-20
  • 打赏
  • 举报
回复
最好的方式是使用存储过程 那样效率是最高的
灵犀Sword 2010-07-20
  • 打赏
  • 举报
回复
这是个短信平台中对于接受MO消息的处理 因为该系统 可能会同时接受100个国家的增值业务短信 所以肯定会有大量的处理..忘高手们不要只是路过下..
icy_csdn 2010-07-20
  • 打赏
  • 举报
回复
不知道是什么类的数据,每秒会有1K的数据插入?
1. 尽量减轻数据库的负担,让数据库只做它自己擅长的数据存储和检索,在提交数据库前做相关的校验和处理工作;
2. 一定要做缓存处理,先存放于内存(没有比这个速度更快的了),然后再批量提交数据库;
如果这样还不够(oracle该扔了),那你就应该考虑不能只靠一台数据库来支撑你的业务,考虑分布式存储。

不知道你们的系统中如何架构的,会同时有10000台客户端连接数据库?如果不能满足业务要求,应该重新考虑一下系统架构。
mycsdnhao 2010-07-19
  • 打赏
  • 举报
回复
建缓冲机制,判断完后放到临时表中,定期(比如5分钟)导入到正式表;
或者校验转换完之后直接存成txt文件,定期(比如5分钟)用sql loader导进正式表。
sql loader的效率比insert要高出很多
sujianchinaouya 2010-07-19
  • 打赏
  • 举报
回复
不懂观望中,
hitsnail 2010-07-19
  • 打赏
  • 举报
回复
分次提交,使用preparestatement()的 batch方式,基本就达到你的要求了.
dinghun8leech 2010-07-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cooljia 的回复:]
1. 使用多线程,在应用程序中将字符操作提前处理掉,简化oracle sql语句
2. 采用批量提交,避免每一个数据操作一个commit动作
[/Quote]
我倒是觉得,通常字符串处理的速度远高于与数据库交互的速度,而数据入库肯定只能排队一个个来,因此此处使用多线程,似乎也只能让准备入库的数据队伍排的长点儿罢了,呵呵。
批量提交也是我能想到的唯一办法。嘿嘿。
dr_lou 2010-07-19
  • 打赏
  • 举报
回复
只能想到批量插入,至于你说的校验我觉得不是瓶颈,插入前做好呗。
O溺水的鱼0 2010-07-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jkgao801 的回复:]
存储过程应该是不错的选择
[/Quote]
尽量还是用存储过程
灵犀Sword 2010-07-19
  • 打赏
  • 举报
回复
一秒如何实现 多个1000个用户的提交事件 有没有什么可以按时间来执行批处理的?
加载更多回复(5)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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