我刚刚在使用SimpleDB时发现了一个假设。我怀疑它是安全的,但是想要其他意见,因为文档似乎没有涵盖它。
所以说Process 1存储一个带有x属性的项目。当进程2尝试访问所述项目时(没有一致的读取)&找到它,是否保证过程1存储了所有属性?
我排除了另一个进程可能改变数据的可能性。
我也知道,除非使用了一致的读取,否则进程2无法保证看到该项目,我只是谈论最终看到它时的观点。
我想问题是,一旦我能得到一个项目&我没有在其他任何地方改变它我可以假设它有一个特殊的固定模式并访问我所有的预期属性而不检查它们是否真的存在?
我不希望处于需要继续请求项目的情况,直到他们拥有我需要使用它们的所有属性。
感谢。
答案 0 :(得分:2)
尽管亚马逊在文档中没有提供此类保证,但最终一致性的当前实现保证您将看到进程1存储的所有属性,或者没有任何属性。
请参阅AWS论坛上的this thread,更具体地说,请查看确认行为的亚马逊员工this answer。
我认为我们不会在文档中做出这样的保证,但是 当前实现将每个Put请求视为一个包。它不会 将请求拆分并逐步应用操作。你会得到 步骤1响应或步骤2响应,直到最终一致 摇摇欲坠,给你留下第二步的回应。
虽然这是未记录的行为,但我怀疑很多SimpleDB用户现在都依赖它,因此亚马逊不太可能很快改变它,但这是我猜的。