失效在 AWS DynamoDB DAX 多区域中是如何工作的

How does invalidation work in AWS DynamoDB DAX multi-region

我们正在使用 DynamoDB 全局 tables 并计划在 DynamoDB 的顶部使用 DAX 来启用缓存。但我没有看到任何关于 DAX 失效将如何在多区域设置中发生的提及。

例如,假设有 2 个集群,一个在 us-west-2 中,一个在 us-east-2 中。如果我们使用 DAX 客户端更新 us-east-2 中的某些内容,它的缓存将被更新,但是在将数据复制到 us-west-2 时,global table 是否也会更新 us-west-2 中的缓存?我在 DynamoDB documentation.

中没有看到任何提及

此时,区域二中的DAX 缓存将不知道GT 复制写入。目前最好的选择是在两个区域的 DAX 上保持较低的 TTL,这样它会更频繁地获取最新版本。

DAX 缓存将不会更新。全球 tables 将复制其他地区的数据。但是,它不会更新缓存。甚至,query cacheitem cache是独立的。

DAX does not refresh result sets in the query cache with the most current data from DynamoDB. Each result set in the query cache is current as of the time that the Query or Scan operation was performed. Thus, Charlie's Query results do not reflect his PutItem operation. This will be the case until DAX evicts the result set from the query cache.

通过策略写入:-

The DAX item cache implements a write-through policy (see How DAX Processes Writes). When you write an item, DAX ensures that the cached item is synchronized with the item as it exists in DynamoDB. This is helpful for applications that need to re-read an item immediately after writing it. However, if other applications write directly to a DynamoDB table, the item in the DAX item cache will no longer be in sync with DynamoDB.

DAX Consistency

在上面的语句中,您可以将other application 单词视为global table 复制。 DAX 不会知道为全局 table.

完成的复制

这是 AWS 服务团队一直存在的问题。他们似乎是孤立地设计事物,而不用担心不同的相关上下文。我在好几个地方都看到过这种设计上的不一致。事实上,即使在 DAX 和 DynamoDB 中,2 个 TTL 概念也没有考虑其功能,即使它们是相关的。不知道 AWS 服务团队何时会像 Microsoft 为他们的解决方案所做的那样设计具有完整上下文的东西。