我在使用多线程编程时遇到数据一致性问题。
用例:我将在队列中获取消息(人员信息)。我有一个多线程代码,它从队列中获取数据并将其放入另一个数据库。这里我需要比较人员信息,如果有重复的,我需要合并/更新并插入到另一个数据库。
问题:如果两个相似的人物对象同时在两个不同的线程中,那么两者都认为这个人不在第二个数据库中,并且都尝试插入它 - 所以在这里我们会有重复的记录。
如何解决上述问题?
Conceptually if I get to know how to do, I can code for this in Java or am using Apache storm and run parallel process.
最佳答案
可能的解决方案:
插入队列时检查重复项。除了队列之外还维护一个哈希表。每次插入队列时,检查数据是否已经在哈希表中。如果是这样,请丢弃插入物。插入的复杂度仍然是 O(1),但增加了内存成本。
不是插入到单个队列,而是根据哈希值插入到多个队列。一个消费者线程处理一个队列。这也是维护时序数据的常用方式。
关于java - 多线程程序中的数据不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30126783/