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