2

在 AWS 文档中:

每当在表上发生写入时,都必须更新表的所有索引。在具有大型表的大量写入环境中,这会消耗大量系统资源。在只读或以只读为主的环境中,这不是一个大问题。但是,您应该确保您的应用程序实际使用了索引,而不是简单地占用空间。

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

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

例如,假设我有下表:

关键字(哈希)| 电话号码(范围)| 属性 1...N | 帐户ID

KEYWORDPHONE NUMBER并且ACCOUNT ID不会更改(但可能会删除整个项目)。

还有一个全局二级索引:

帐户 ID(哈希)| 电话号码(范围)| 关键词

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

文档不清楚(对我来说)。我假设如果ACCOUNT ID,PHONE NUMBER并且KEYWORD不更改(但其他属性可能),则全局二级索引将不会写入。(但如果原始表项被删除,它将导致重写)。

4

1 回答 1

1

我相信这将取决于对 GSI 的预测。如果您进行投影KEYS_ONLY,那么我不希望在 GSI 上再写一篇文章。但是,如果您 p​​roject ALL,这是默认设置,那么所有数据都存在于表和 GSI 中,所以是的,它必须更新 GSI。

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

于 2020-01-28T22:23:38.490 回答