选定记录的数据处理和更新

Posted

技术标签:

【中文标题】选定记录的数据处理和更新【英文标题】:Data processing and updating of selected records 【发布时间】:2013-07-24 18:34:30 【问题描述】:

基本上,所需的工作是数据库上的大量记录,并且可以一直插入更多记录:

选择状态为“NEW”的 个记录 -> 处理记录 -> 将记录更新为状态“DONE”。

这听起来像是“地图缩减”。

我认为上述工作可以并行完成,甚至可以由不同的机器完成,但我担心的是:

当我选择状态为“新”的 条记录时 - 我怎么知道这些记录中没有一条正在被其他作业处理?

当然,不应多次选择和处理相同的记录。 性能至关重要。 天真的解决方案是循环完成上述基本工作。

好像和大数据处理/nosql/map reduce等有关。

谢谢

【问题讨论】:

这取决于,正在使用什么数据库? 目前使用的数据库是oracle,小概率可以是HBase。所以请给我2个解决方案(如果它们完全不同):1.对于Oracle数据库。 2. 对于 HBase。谢谢 在第一个工作完成之前开始第二个工作处理新记录的原因是什么? 【参考方案1】:

由于考虑到性能问题...我们可以做到这一点。主要目标是将记录分发给客户,这样客户就不会获得相同的记录。 我不管数据库...

    如果您还有一列用于锁定记录。因此,在获取这些记录时,您可以设置锁定,以防止获取发送时间。

    但是如果你没有这样的能力,那么我的赌注是创建另一个表或im-memory键值存储,使用记录主键和锁,在获取记录时你需要检查记录其他表中不存在....

如果您有HBase,那么它可以很容易地实现,第一种方法可以通过性能实现。

【讨论】:

我考虑并行执行它只是为了提高性能和扩展性-因此它可以由多个线程完成-而且-可能由多台机器完成-如果不能并行完成,则没有缩放 - 不超过一台机器进行处理。关于1,记录锁定-我想到了,我认为它很复杂:该过程将锁定记录-选择状态为“NEW”的记录->处理记录->更新记录通过解锁它们来状态“完成”。如果一个进程锁定记录并在中间崩溃,记录保持锁定。更多处理。 所以我认为你可以做的是必须有一些 TTL,在 TTL 过期后,下一个线程/进程可以访问该记录。 TTL 值需要足够大,以允许第一个客户端处理记录并提交... 也考虑过 :) 再一次 - 这些都是很好且有效的解决方案 - 正如我所写 - 更多处理,但我不确定它是否应该那么复杂。所以我会记住这一切。没有并行的第一个解决方案,或者具有锁定和更复杂性的第二个解决方案。谢谢! 对于记录级别锁定查看LINK

以上是关于选定记录的数据处理和更新的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个网格的另一个选定记录将数据添加到网格

从下拉列表中更新所选值的 mysql 记录

如何使用单个索引更新多索引数据框中的记录

更改更新核心数据属性的删除方法

更新数据表sql中的选定行列值

Android,如何从我的数据库更新列表视图中的选定项目?