既然 Amazon 的 SimpleDB 实现了一致性读取和条件更新/删除,就可以使用 MVCC 实现跨域事务。
有没有提供它的客户端库?
既然 Amazon 的 SimpleDB 实现了一致性读取和条件更新/删除,就可以使用 MVCC 实现跨域事务。
有没有提供它的客户端库?
目前,没有,而且有可能是不可能的。
条件更新和删除只允许对正在更新的项目设置条件。除此之外,没有内置机制来存储相同数据的多个版本或存储多值属性的序列信息。可以使用不同的属性名称,但这会破坏查询。
最近的一致性更新允许在项目级别轻松实现事务。但是,跨相同(或不同)域中的多个项目,没有直接的实现。也没有隔离级别选项。
这可能是可行的,但我担心您最终会在此过程中杀死所有查询功能。要么是通过不一致的属性名称,要么是通过要求比良好性能允许的更多的 SELECT 条件。
除此之外,似乎需要对所有数据的访问进行一致的读取。这可能会否定使用最终一致系统的所有可用性优势,因为即使无法访问单个副本节点,一致读取也会失败。
我不是想成为一个反对者,我只是想知道它有多实用。你已经不得不放弃很多特性来获得 SimpleDB 的高可用性,如果你不需要这些特性,这很好,但是如果你也放弃高可用性,我认为这样的情况要少得多将是一个很好的权衡。
在为 SimpleDB 开发我的 Simple Savant C# 库时,我对此进行了很多思考,我得出的结论是,尝试在像 SimpleDB 这样的分布式系统上分层真正的事务性是一个坏主意,原因有很多。
我想出的最好的东西(在不过度承诺和过度复杂化系统的情况下提供价值)是我称之为“可靠写入”的东西。这将保证跨域更新中的所有操作(放置和删除)最终完成。部分写入永久失败的唯一方法是您的更新之一违反 SimpleDB 约束。
此功能尚未实现,但您可以在此处阅读更多详细信息并评论该功能。我很想听听您的想法以及这将如何满足您作为应用程序开发人员的需求。