如果 DynamoDB 二级索引内部没有属性发生变化,它会被重写吗?

Do DynamoDB Secondary Indexes Get Rewritten if no attributes change inside it?

在 AWS 文档中:

Whenever a write occurs on a table, all of the table's indexes must be updated. In a write-heavy environment with large tables, this can consume large amounts of system resources. In a read-only or read-mostly environment, this is not as much of a concern. However, you should ensure that the indexes are actually being used by your application, and not simply taking up space.

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SQLtoNoSQL.Indexes.html

但是,如果我正在创建一个全局二级索引,其中该索引的属性没有发生任何变化,它会导致重写吗?

例如,假设我有以下 table:

KEYWORD (hash) | PHONE NUMBER (range) | ATTRIBUTE 1...N | ACCOUNT ID

KEYWORDPHONE NUMBERACCOUNT ID 不会改变(但可能会删除整个项目)。

还有一个全局二级索引:

ACCOUNT ID (hash) | PHONE NUMBER (range) | KEYWORD

用例是我需要在第一个 table 中找到所有具有相同 ACCOUNT IDPHONE NUMBER 的项目。然后我将需要 KEYWORD 属性。但是,这不需要经常发生。全局二级索引中的任何属性都不会在原始 table.

中发生变化

文档不清楚(对我来说)。我假设如果 ACCOUNT IDPHONE NUMBERKEYWORD 不更改(但其他属性可能),全局二级索引将不会写入。 (但如果原始 table 项目被删除,它将导致重写)。

我相信这将取决于 GSI 的预测。如果您正在预测 KEYS_ONLY,那么我不会期望在 GSI 上再次写入。但是,如果您投影 ALL,这是默认设置,那么所有数据都位于 table 和 GSI 中,所以是的,它必须更新 GSI。

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html#GSI.Projections