DynamoDB - 单项VS多项,哪个更划算

DynamoDB - Single item vs Multiple item, what is more cost-effective

方法 #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,而不是返回整个对象信息,returns只需要什么, 少读 KB

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

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

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

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

非常感谢

It's 4 writes for single object (does the writes also depend in query transactions or only KB size?)

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 - If the full json item is less than 1KB, let's say 500b, is rounded up to 1kb , or 1.5kb rounded up to 2kb, etc

WCU/RCU 向上舍入,这意味着如果您编写 1.5 KB 的 json 文档,如果使用非事务性写入,则成本 2 WCU 并且 4 WCU 用于事务写入。

关于您的方法,您可能希望使用较小的对象并避免一致 reads/transactional 写入,如果它们不是真正必要的话。

此外,DynamoDB Projection Expressions 用于检索文档的各个部分。不幸的是,据我所知,这并没有减少 RCU 消耗。