【发布时间】:2021-08-11 12:19:47
【问题描述】:
我遇到过 CRDT,我对它们的潜力感到兴奋,但我担心它不能很好地与我所知道的数据库配合使用。每当我必须更新我的数据库状态时,我仍然需要在写入数据之前进行某种锁定,无论是悲观的还是乐观的。除非有一个数据库接受 CRDT、OT 或某种补丁集作为其 DSL 的一部分并且它在内部处理并发?有没有这样的数据库?
【问题讨论】:
标签: database database-design crdt
我遇到过 CRDT,我对它们的潜力感到兴奋,但我担心它不能很好地与我所知道的数据库配合使用。每当我必须更新我的数据库状态时,我仍然需要在写入数据之前进行某种锁定,无论是悲观的还是乐观的。除非有一个数据库接受 CRDT、OT 或某种补丁集作为其 DSL 的一部分并且它在内部处理并发?有没有这样的数据库?
【问题讨论】:
标签: database database-design crdt
我知道有几个。从相当可靠的开始:
还有一些不太成熟的案例,比如AntidoteDB,这提供了很大的希望,但它的开发过程相当缓慢(目前)。
一些分布式数据库对某些 CRDT 类型提供有限的支持,例如。 RavenDB 和 Cassandra 计数器类型。
Azure CosmosDB 允许您配置 multi-master replication,您可以在其中定义自己的“存储过程”(在 JavaScript 中),该过程将负责处理并发写入期间发生的冲突。这样您就可以编写自己的 CRDT。
还有一些产品设计为在客户端设备上用作 CRDT。这些不是严格意义上的数据库,而是可以嵌入应用程序本身的框架。它们支持持久性,但通常设计用于处理较小量的数据。其中包括Yjs、automerge 和ditto。
【讨论】: