我对分布式数据库比较陌生,尽管我已经学习了相关的文献(例如CAP定理,CRDT),并实现了一些POC来允许水平扩展我的应用程序。
然而,现在我面临着一个具有挑战性的问题。为了水平扩展应用程序,服务之间的通信是通过分布式队列完成的。作为背景,我确实需要一个自定义的CRDT方法来保持数据最终的一致性,并且我确实需要我的应用程序像缓存一样工作(与REDIS远程相关)。
现在的挑战是我还需要持久化数据。这要求我保持应用程序缓存和数据库中的数据最终保持一致。我检查了Cassandra,我看到了一个标签1,其中有人试图为自定义CRDT合并功能添加功能(正如我所说的,这是有原因的)。这从来没有进入Cassandra,而且似乎有一些问题需要解决。
我的选择是什么,或者是允许自定义合并的具体分布式数据库引擎的形式,或者是可以帮助解决问题的算法(例如,以db触发器或类似的形式)。
发布于 2020-11-10 21:21:47
据我所知,很少有数据库允许您指定自己的自定义冲突解决算法。Tbh。我真正找到的唯一一个-免责声明:我不是微软的倡导者-是Azure CosmosDB。它具有兼容MongoDB的接口,并且可以配置为使用主-主复制策略,在这里您需要使用specify your own conflict resolution algorithm (使用JavaScript)。您可以使用它来定义您自己的合并操作。
如果您将目光从数据库原生解决方案转向应用程序级别的解决方案,那么有几个工具,如ie。Akka (在JVM或.NET版本中都可用),它使您能够在分布式数据模块中编写自定义CRDT。JVM版本还支持multi-datacenter persistence,它在概念上更接近于交换式CRDT的工作方式,并且可以与Cassandra后端集成。
https://stackoverflow.com/questions/64739404
复制相似问题