package-ORACLE获取结果集的同时更新数据,该如何实现

问题描述

ORACLE获取结果集的同时更新数据,该如何实现

公司现有的一个项目,数据都存在ORACLE里面的,其中一个表是存储流水信息的,由一个程序负责写入数据另一个程序进行读取并更新状态,现在需要提高读取速度,拟将读取改成多线程的读取,该如何处理?
为确保效率和避免重复读取,我考虑了以下方案:
1.通过package实现返回结果集,并把这些结果集的记录直接记为已读取:这样操作使整个读取只需更新一次状态,但实现时发现,采用游标读取了这些记录后,再根据游标对这些数据的状态进行更新会导致游标移动到结果集末端,读取不出数据;
2.使用一个随机状态值作为待取状态,用函数或存储过程通过游标读取待取状态的数据,读取成功后,更新这些数据状态为已读取:这样操作比上一个方案多了一倍的更新操作和一个确认随机状态值不在表中的操作,流程明晰,但比较占用资源。
个人对ORACLE了解不深,对于这样的需要频繁读写和更新状态的数据库操作,如何处理才比较恰当?我设想的方案1是否无法实现,方案2可以改进吗?

解决方案

一般多个批量线程直接没有显著的性能差别,所以只要把数据等分分配就可以了。
只要有一个自增的ID,把ID以进程数m进行取模,按余数分配给每个进程就不会产生冲突了。
其实每个进程只要取得各自起始的ID,每步循环+m就是下条记录的ID,直接用ID取数/设标记。

解决方案二:

你的需求多线程只会添乱,要提高读取效率 除了优化查询sql增加索引外 你可以把你的业务流程拆开
一个线程只负责读取数据 读完就放入队列里,对数据的处理个更新都放在另外一个线程里

时间: 2024-10-29 23:21:20

package-ORACLE获取结果集的同时更新数据,该如何实现的相关文章

使用虚拟机在 Oracle Enterprise Linux 上免费试用 Oracle 真正应用集群 10g 第 2 版

修订者Wilson注: 为了方便初学者更好地完成本实验,Wilson对本文进行了若干注释 本文所需要的VMware server 1.0.3 注册码是: 注册码1: 98XY4-54VA4-4216V-4PDZ6 注册码2: WH0M5-XW50J-WA4FU-4MTZ3 此外,同学们还应该下载一个FTP客户端工具用于把各种软件从Windows主机传送到Linux虚拟机当中.最好该工具支持ssh2 over ftp协议的,推荐使用FileZilla: http://filezilla.sourc

ORACLE学习笔记-添加更新数据函数篇_oracle

一.添加数据 /*添加数据*/ insert into STU values('stu0004','赵一',18,1,"kc0004"); insert into STU(STU_ID,STU_NAME,STU_AGE,STU_SET ) values('stu0013','储十一',19,1); 说明:如果不指定将数据添加到那个字段,那么此时必须列出全部数据,如果列出字段,则一一对应,必须列出约束不为空的所有字段,否则报错. 二.更新数据 /*更新数据*/ update STU SE

Oracle获取绑定变量的各种方法

Oracle获取绑定变量的各种方法 当Oracle解析和执行含有绑定变量的目标SQL时,如果满足如下两个条件之一,那么该SQL中的绑定变量的具体输入值就会被Oracle捕获: l 当含有绑定变量的目标SQL以硬解析的方式被执行时. l 当含有绑定变量的目标SQL以软解析或软软解析的方式重复执行时,Oracle在默认情况下至少得间隔15分钟才会捕获一次.这个15分钟受隐含参数"_CURSOR_BIND_CAPTURE_INTERVAL"控制,默认值为900秒,即15分钟. SYS@orc

Oracle 11gR2 RAC集群服务启动与关闭总结

<Oracle 11gR2 RAC集群服务启动与关闭总结> 新年新群招募: 中国Oracle精英联盟 170513055 群介绍:本群是大家的一个技术分享社区,在这里可以领略大师级的技术讲座,还有机会参加Oracle举办的技术沙龙,与兴趣相投的小伙伴一起笑谈风云起,感悟职场情! 引言:这写篇文章的出处是因为我的一名学生最近在公司搭建RAC集群,但对其启动与关闭的顺序和原理不是特别清晰,我在教学工作中也发现了很多学员对RAC知识了解甚少,因此我在这里就把RAC里面涉及到的最常用的启动与关闭顺序和

【方法整理】Oracle 获取trace跟踪文件名的几种常用方式

[方法整理]Oracle 获取trace跟踪文件名的几种常用方式 1  BLOG文档结构图     2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① trace跟踪文件的获取   Tips: ① 本文在itpub(http://blog.itpub.net/26736162).博客园(http://www.cnblogs.com/lhrbest)和微信公众号(xiaomaimiaolhr)有同

Oracle经验技巧集

oracle|技巧  Oracle经验技巧集1.删除表空间    DROP TABLESPACE TableSpaceName [INCLUDING CONTENTS [AND DATAFILES]]2.删除用户    DROP USER User_Name CASCADE3.删除表的注意事项    在删除一个表中的全部数据时,须使用TRUNCATE TABLE 表名;因为用DROP TABLE,DELETE * FROM 表名时,TABLESPACE表空间该表的占用空间并未释放,反复几次DRO

ORACLE获取DDL的几种常用的方法

oracle ORACLE获取DDL的几种常用的方法   作者:刘颖博 时间:2004-2-26 mail:liuyingbo@126.com,请指正   转载请注明出处及作者   大体的分为三种方法: 一:可以通过toad.plsql develop等第三方工具进行导出DLL操作,用这种办法的好处在于操作简单方便,但需要安装,下面简单介绍一下用这两个工具获得DLL语句的操作.   1.首先是toad工具,可以到www.quest.com网站上下载 操作步骤的简要介绍如下: a.    启动to

开发者论坛一周精粹(第十五期):Oracle发布多个Java漏洞更新-2017年7月

第十五期(2017年7月17日-2017年7月23日 ) 2017年7月18日,Oracle官方发布了2017年7月份的安全公告,安全公告中报告了多个漏洞,远程用户可以访问和修改目标系统上的数据,或可以在目标系统上获得提升的权限,或导致目标系统上的拒绝服务,涉及到的安全漏洞较多,安全风险较高. [漏洞公告]Oracle发布多个Java漏洞更新-2017年7月 https://bbs.aliyun.com/read/322152.html 您的MySQL数据在裸奔中吗?来不及了,快上车 https

mysql- Mybatis select 没有获取更新数据 (缓存 ?)

问题描述 Mybatis select 没有获取更新数据 (缓存 ?) 写了一个简单的mybatis demo,没有集成其他事务管理,对接mysql数据库. 在表file_resources的mapper里面定义了一个这样的嵌套sql , 里面用到了 postinfo . poststatus两个表 </select> <select id=""selectPendingPostItemCount"" resultType=""