AWS为什么在S3的DynamoDB中说“强一致性”和“写后读一致性”?他们两个都意味着同一件事吗?

最佳答案

从写后读取是一种强一致性的意义上说,这两个术语本质上是同一件事。

值得注意的区别是DynamoDB的强一致性包括更新后读取和删除后读取以及写入后读取。 S3仅提供写入后读取...,因此可以说写入后读取是强一致性的子集。

在S3中,一切最终都与一个异常一致:如果创建了一个对象,并且以前没有尝试获取该对象(例如在创建对象之前检查该对象是否已存在),则在创建该对象之后获取该对象将始终返回您创建的对象。这就是S3中写入后读取的一致性,并且在所描述的情况下始终可用-您不必要求S3对新对象进行高度一致的写入后读取,因为它总是被提供。

S3中的任何其他操作都没有该一致性保证。例子:

  • 获取一个不存在的对象,获取一个404,然后创建它,然后立即尝试再次获取它。您可能会得到它,但是可能会在短时间内继续获得404。
  • 在S3中创建一个对象,然后获取存储桶中的对象列表。新对象可能不会立即显示在列表中。
  • 下载一个对象,将其删除,然后尝试再次下载。您可能会在短时间内成功。您最终将获得404。
  • 下载一个对象,然后将其覆盖。再次下载。您可能会得到新的对象,或者可能会在短时间内得到旧的对象。您不会得到损坏的或部分的对象,但是您可能会得到旧的或新的对象。

  • 所有这些都是S3 Consistency Model的各个方面,它们是性能优化的结果。

    DynamoDB还针对性能进行了优化,因此,出于相同的原因,它默认为最终(不太强)一致性。但是,如果需要,可以在DynamoDB中指定高度一致的读取。这些带有警告:

    关于amazon-web-services - "Strong Consistency"与"Read-after-write Consistency",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59316960/

    10-12 22:53
    查看更多