灵活排序存储中的记录

时间:2017-10-10 10:29:46

标签: algorithm sorting data-structures

我们的存储空间中有很多记录应该保留订购。 这些记录通过常用的CRUD API进行管理:因此用户可以添加新记录,更改现有记录的顺序等。我们用于记录的存储不是事务性的(实际上它是MongoDB)。我们会在事件更新时触发事件以便记录,以便消费者可以实际使用API​​来获取更新版本的记录。

让我再次强调一下:记录应该在CRUD应用程序中进行修改以及通过事件阅读状态的消费者时保持有序。

如果我们决定使用某个整数字段来跟踪记录顺序,那么我们必须在更改某些记录的顺序时更新许多记录。例如,我们有

Fox order=1
Bear order=2
Cat order=3

然后我们决定添加Wombat作为第二条记录 - 我们必须更新Bear和Cat的顺序:

Fox order=1
Wombat order=2
Bear order=3
Cat order=4

想象一下,有很多记录会以这种方式转移 - 这可能会成为严重的问题,因为我们将为所有这些记录触发更改事件,消费者基本上必须重新同步整个存储。

如果我们使用链表方法(每个记录跟踪其邻居),那么重新排序变得更容易,但消费者可能发现自己处于不一致状态。例如,我们有:

Fox next=Bear previous=none
Bear next=Cat previous=Fox
Cat next=none previous=Bear

然后我们将Wombat添加为第二条记录:

Fox next=Wombat previous=none
Wombat next=Bear previous=Fox
Bear next=Cat previous=Wombat
Cat next=none previous=Bear

问题在于消费者可以首先获得Fox被更改的事件,其下一条记录是Wombat,然后才真正获得有关正在创建Wombat的事件。如果消费者此时执行某些聚合操作 - 它将失败,因为它的记录副本不一致。

是否有任何结构或方法可以保持记录顺序,允许任意插入/重新排序/删除,但又避免了交易的需要?

0 个答案:

没有答案