分布式数据库通过结合一致性模型、协调协议和冲突解决策略来管理并发读写。这些系统旨在平衡数据可用性、一致性和分区容错性,同时处理跨节点的多个操作。关键方法包括使用时间戳、版本控制和共识算法来排序操作和解决冲突。例如,可以为写入分配时间戳以确定其优先级,而读取可以检查多个节点以确保它们返回最新的数据。
一种常见的方法是使用基于仲裁的系统,其中必须有最少数量的节点(“仲裁”)确认读写操作才能成功。例如,在复制因子为 3 的系统中,写入可能需要来自 2 个节点(写入仲裁)的确认,而读取可能检查 2 个节点(读取仲裁)以确保一致性。这样可以防止在某些节点过时的情况下返回陈旧数据。像 Apache Cassandra 这样的数据库使用可调整的一致性级别,允许开发人员根据他们对速度与准确性的需求来调整仲裁要求。另一种方法是多版本并发控制 (MVCC),其中数据存储有版本号或时间戳。读取访问特定时间点的数据库快照,避免与正在进行的写入发生冲突。PostgreSQL 的分布式扩展(如 Citus)使用 MVCC 来隔离事务并保持跨分片的一致性。
对于写入冲突,分布式数据库通常依赖于无冲突复制数据类型 (CRDT) 或应用程序定义的解析逻辑。CRDT 确保可以自动合并对相同数据的并发更新(例如,递增计数器),而不会丢失数据。像 Redis Enterprise 这样的平台使用 CRDT 进行主动-主动复制。当无法自动解决时,像 Google Spanner 这样的系统使用同步时钟(通过 TrueTime API)和两阶段提交协议来全局序列化事务。开发人员还可以实现应用程序级别的冲突处理程序,例如“后写入优先”(基于时间戳)或复杂数据结构的自定义合并逻辑。这些技术共同使分布式数据库能够在保持性能和可靠性的同时处理并发。