0

方法#1:(单项)

单个分区键,项目中包含所有数据,例如:

PK: Item#1
object_attribute_1: full json item
object_attribute_2: full json item
object_attribute_3: full json item
object_attribute_4: full json item

我看到的优点:更少的写入成本,我们同时写入整个项目,因此汇总更有效。

缺点:读取成本可能更大,因为没有过滤选项,假设我只需要查询 object_attribute_2 而不是整个项目。

方法#2:(多项)

分区键+排序键组合,示例:

Item#1:
PK: Object#1
SK: object_attribute_1_SK
object_attribute_1: full json item
Item#2:
PK: Object#1
SK: object_attribute_2_SK
object_attribute_2: full json item
Item#3:
PK: Object#1
SK: object_attribute_3_SK
object_attribute_3: full json item
Item#4:
PK: Object#1
SK: object_attribute_4_SK
object_attribute_4: full json item

我看到的优点:可以降低读取成本,在我们只需要特定事物的情况下,使用 SK,而不是返回整个对象信息,只返回需要的内容,更少的 KB 读取

我看到的缺点:可能会增加写入成本?

1 - 单个对象的 4 次写入(写入是否还取决于查询事务或仅 KB 大小?)

2 - 如果完整的 json 项小于 1KB,比如说 500b,四舍五入到 1kb,或者 1.5kb 舍入到 2kb,等等

您建议我采用哪种方法?我想好了吗?

非常感谢

4

1 回答 1

1

它是单个对象的 4 次写入(写入是否还取决于查询事务或仅 KB 大小?)

DynamoDB 有WCU(Write Capacity Unit)这个概念。这可以这样计算:

1 WCU = 1 write of up to 1 KB/s
or
2 WCU = 1 transactional write request up to 1 KB/s

因此,如果您使用4 WCU,您可以4 KB使用非事务性写入操作每秒写入数据,或者2 KB使用事务性写入操作写入数据。

2 - 如果完整的 json 项小于 1KB,比如说 500b,四舍五入到 1kb,或者 1.5kb 舍入到 2kb,等等

WCU/RCU 向上取整,这意味着如果您编写一个 json 文档,说明1.5 KBif 将花费2 WCU非事务性写入和4 WCU事务性写入。

关于您的方法,您可能希望使用较小的对象并避免在不需要时进行一致的读取/事务性写入。

此外,DynamoDB 具有用于检索文档部分的投影表达式。不幸的是,据我所知,这并没有减少 RCU 的消耗。

于 2021-11-14T16:25:16.140 回答