我有两个应用程序App 1和App 2.两个都是Rails应用程序。应用程序1从用户收集数据,这些收集的数据需要同步到应用程序2.我使用RabbitMQ和Sneakers(带有5个工作进程)进行应用程序之间的同步过程。每当App 1中有更新时,作业就会排队到RabbitMQ服务器。从那里,Sneakers处理这些作业并将数据存储在App 2数据库中。
用于在两个应用程序中存储数据的架构如下。
App 1
作者有很多书。
作者表:
id name
1 Kruze
2 Jiht
3 Rama
书桌:
id name author_id
1 Book A 1
2 Book B 2
3 Book C 1
App 2
作者表:
id name original_id books
1 Kruze 1 {'1':{'id':1, 'name':'Book A'}, '3':{'id':3, 'name':'Book C'}}
2 Rama 3 {}
3 Jiht 2 {'2':{'id':2, 'name':'Book B'}}
此处original_id列是App 1作者记录ID,books列是包含作者所有书籍信息的哈希。
我在这里面临的问题是,当多个用户同时在同一作者的书籍(创建或更新)上进行多次更新时,有多个作业进入RabbitMQ服务器。在App 2中,Sneakers并行处理这些工作(因为在App 2中运行了五个运动鞋流程,所以一次完成五个工作)。每个运动鞋过程都需要不同的时间才能完成。所以最后,App 2中存在错误的数据。
Enqueue Order Commit Order Process
1 1 1
2 2 2
3 5 5
4 6 1
5 4 4
6 3 3
7 7 2
8 10 5
9 9 4
10 8 3
但是当只有一个Sneakers流程时,不会发生此问题。
我的问题:有没有办法克服这个不正确的数据问题?