DynamoDB Scan 最终一致性与 GSI Query 最终一致性
DynamoDB Scan eventual consistency vs. GSI Query eventual consistency
我有一个 table,之前我一直在使用 Scan API(与 "ConsistentRead": false
,即最终一致)来实现按非关键属性进行过滤的目的.因为成本很高,所以现在我决定加一个global secondary index(GSI),其中我之前扫描的属性是一个hash key,我打算在这个索引上使用Query API .
我知道 GSI 不支持“先写后读”一致性或强一致性。我知道,当我使用 Scan API 时,我也没有使用这种一致性,因为我是以最终一致的方式进行的。
我很担心,在 GSI 中反映以前的更新或写入所花费的时间与在以最终一致的方式扫描 table 时所花费的反映更新和写入所花费的时间是否有很大不同?
例如,是否可能出现以下情况:
a) 扫描
- 在 table 上调用了 PutItem API,即已插入新记录。
- 我扫描了 table,在 50 毫秒 之后我得到了新数据。
b) 查询 GSI
- 在 table 上调用了 PutItem API,即已插入新记录。
- 我查询了索引,在 500ms 之后我得到了新的数据。
因此,如您所见,500 毫秒与 50 毫秒的差异太大了。
我们的一致性能有这么大的差异吗?或者,我们会有非常相似的价值观吗?
我担心此更改是否会破坏现有功能。
我自己没有测试过,但是 500ms 对我来说似乎有点慢。
您是否看到 the documentation 警告正确配置 table 以便主 table 和索引都可以更新?
此外,他们提到“几分之一秒”是预期的延迟。
话虽这么说,但过渡到 GSI 不会错。 DynamoDB 扫描是非常糟糕的做法,并且只会随着 table 的增长而变得更糟。 GSI 性能不取决于您的 table 大小
我有一个 table,之前我一直在使用 Scan API(与 "ConsistentRead": false
,即最终一致)来实现按非关键属性进行过滤的目的.因为成本很高,所以现在我决定加一个global secondary index(GSI),其中我之前扫描的属性是一个hash key,我打算在这个索引上使用Query API .
我知道 GSI 不支持“先写后读”一致性或强一致性。我知道,当我使用 Scan API 时,我也没有使用这种一致性,因为我是以最终一致的方式进行的。
我很担心,在 GSI 中反映以前的更新或写入所花费的时间与在以最终一致的方式扫描 table 时所花费的反映更新和写入所花费的时间是否有很大不同?
例如,是否可能出现以下情况:
a) 扫描
- 在 table 上调用了 PutItem API,即已插入新记录。
- 我扫描了 table,在 50 毫秒 之后我得到了新数据。
b) 查询 GSI
- 在 table 上调用了 PutItem API,即已插入新记录。
- 我查询了索引,在 500ms 之后我得到了新的数据。
因此,如您所见,500 毫秒与 50 毫秒的差异太大了。
我们的一致性能有这么大的差异吗?或者,我们会有非常相似的价值观吗? 我担心此更改是否会破坏现有功能。
我自己没有测试过,但是 500ms 对我来说似乎有点慢。
您是否看到 the documentation 警告正确配置 table 以便主 table 和索引都可以更新?
此外,他们提到“几分之一秒”是预期的延迟。
话虽这么说,但过渡到 GSI 不会错。 DynamoDB 扫描是非常糟糕的做法,并且只会随着 table 的增长而变得更糟。 GSI 性能不取决于您的 table 大小