我有一个两难之间的特定表格的处理,也许你能帮助我。
我有一个表,其功能是作为一个工作队列。记录被插入并需要处理。记录处理完成后,将从队列中删除。 有几个限制:
- 只有一个实体可以处理在任何给定时间的记录(以及由“实体”,我的意思是:一个线程,或连接到同一个数据库在单独的计算机)
- 实体有些动态。它们可能会发生变化(实体数量或特征)
- 实体处理1个事务中的记录
- 处理必须并行发生(如果entity1选择batch1,entity2必须能够并行处理batch2,而不必等待使用实体来完成处理)
- 一旦实体回升记录处理,记录整个“批”这一属于,不得被其他实体来采摘。当我说 “批量”,我的意思是表(逻辑)安排如下:
- ROW1(BATCH1)
- 2行(BATCH1)
- ROW3(batch2)
- ROW4(batch2)
- ROW5(batch2)
- ....等。
因此,可以说使用实体和ENTITY2既要挑从表中处理芯片。 如果使用实体挑选ROW1,然后ENTITY2可以挑选任何其他除外BATCH1(任何其他除外ROW1和2行)。
让抽象的处理部分,因为它并不重要的实际处理是什么。我很想知道如何才能阻止实体之间的冲突,只使用一个mysql数据库,但也保持处理的并行性质。
从我的角度来看,我看到了两个很一般方向:
- 使用某种状态字段,这表明一个特定实体已经选择了一个批次,而这一次必须从未来的排除选秀权。这个想法的缺点是,如果挑选批次的实体崩溃,那么恢复其他实体的处理有点困难。
- 下使用mysql的锁,其具有的缺点是很难保证的并行处理,而不是连续的。例如我可以做一个select ... for update,用于entity1。但是entity2不能执行相同的select ... for update,因为这会等待第一个实体在获取所需批次之前完成处理。
我想知道:
- 将导致最小的编码工作的方向
- 是否有任何其他的方向,我在这里失踪(记住,实体不能保持沟通除非通过数据库)
- 如果有这种问题的标准模式
- 如果您可以指向我的文章辩论这类问题。
- 什么是解决这个问题的最有效的方法。
因此,我在这里的是,数据库必须拆分表不同实体之间进行处理,并想知道做到这一点的最好办法。我几乎认为我是第一个处理这个问题的人,并且想知道你的想法。 另外,请注意,这些记录可分批通过一个非常简单的标准(比如,batchId)
亲切的问候,
安德烈被拆分。
请添加一些格式到您的问题和要求特定的东西,它将很难通过这个长长的描述。 – Rachel
谢谢;格式添加。我同意它有点长,但不能做其他事情。第一部分总结了描述;第二部分增加了一些解释。 – Andrei