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 消耗。
方法 #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 消耗。