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取数/设标记。

    评论

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能