NoSQL云数据库服务因其简单的键值操作、高可用性、高可扩展性和可预测的性能而广受欢迎。尽管NoSQL数据库很实用,但它们通常不支持事务。
键值存储等NoSQL数据库是关系数据库的一种替代方案,它强调可扩展性和性能,尤其是对于将核心数据迁移到云中的客户而言。牺牲了关系数据库的核心功能,包括SQL查询和事务,以提供自动分区以实现无限的可扩展性、复制以实现容错以及低延迟访问以实现可预测的性能。
事务作为单一请求提交。DynamoDB事务包括一组作为单个请求提交的操作,这些操作要么成功,要么失败,而不会阻塞。与其他DynamoDB操作一样,事务在规模上提供可预测的性能,这是DynamoDB的架构原则。
事务依赖于事务协调器,而非事务操作则绕过两阶段协调器。DynamoDB中的所有非事务操作都直接在存储服务器上执行,用于访问的数据,同时仍针对多项目事务进行序列化。
事务原地更新项目。DynamoDB不支持同一项目的多个版本,添加多版本并发控制将需要对存储服务器进行大量更改,需要版本保留策略,并引入额外的存储成本,这些成本需要转嫁给我们的客户。用于事务处理的单一版本存储的含义是只读事务和读写事务可能会冲突。
事务会获取锁。为了简化设计并利用低争用工作负载,DynamoDB使用了一种完全避免锁的乐观并发控制方案。
事务使用时间戳按顺序排序。基本思想是为每个事务分配一个时间戳,该时间戳定义其在序列顺序中的位置,只要事务在指定的时间执行就可以实现序列化。DynamoDB事务设计中的一个关键创新是扩展时间戳排序,以适应和利用键值存储的语义。
本文解释了如何使用时间戳排序协议将事务添加到Amazon DynamoDB,同时利用键值存储的语义来实现事务和非事务操作的低延迟。还说明了如何在实践中使用事务,还说明了事务通过服务的路径,描述了对混合事务和键值存储上的单例操作的工作负载的时间戳排序的优化。
针对生产实现的实验结果表明,可以在不影响性能、可用性或规模的情况下支持具有完整ACID属性的分布式事务。
实验对比:吞吐量、延迟、事务和非事务对比、取消率
目标在不影响客户所期望的规模、可用性、耐用性和可预测性的情况下,将事务添加到DynamoDB。作者时间戳排序将事务设计为具有乐观并发控制的单次操作,以确保事务既可串行化又可扩展。同时实现各种事务要求:事务作为单一请求提交;事务依赖于事务协调器,而非事务操作则绕过两阶段协调器;事务原地更新项目;事务不获取锁;事务使用时间戳按顺序排序。