uehang 2015-09-01 06:26 采纳率: 0%
浏览 2605
已结题

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

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

  • 写回答

2条回答

  • Tiger_Zhao 2015-09-01 08:51
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?