繁体   English   中英

在 DynamoDB 中使用 json 作为排序键/分区键值的好习惯吗?

[英]Is using json as sort key/partition key value good practice in DynamoDB?

尝试为 DynamoDB 表定义架构。 两个以上的值决定一行。

放置这些键值的一种潜在解决方案是让排序键包含多个值。 正如此处指定的那样。

受这种方法的启发,我在考虑不使用简单的定界符将值连接在一起,而是使用 JSON 或对象的任何其他字符串表示形式(例如:Jackson 翻译的字符串)作为排序键的值应该能够实现类似的目标并且易于转换。

但是,我担心这样做 - 添加排序键的长度 - 会降低 DynamoDB 的性能吗? 使用复杂的字符串作为排序键可以吗?

TL;DR:对于您的排序键,您可以使用任何字符串(在字节限制内)来区分主键中的记录。 但是如果你对它很聪明,你可以更好地利用它进行排序和过滤。


密钥长度有限制

  • 分区键: 12048字节
  • 排序键: 11024字节

根据主键和排序键的长度,我不知道有任何显着的性能差异。 我确信确保性能是 AWS 设置这些特定限制的部分原因。

从技术上讲,您应该可以使用任何字符串作为密钥,包括 JSON。 但是,根据您打算如何查询表,您可能需要考虑对排序键进行更巧妙的安排。

例如,如果您的排序键包含名字和姓氏,您最终可能会得到如下 JSON:

{"LastName":"Doe","FirstName":"John"}
{"FirstName":"Jane","LastName":"Doe"}

JSON 本身并不关心名称字段的顺序,因此如果您不对 JSON 施加额外的约束,则可能很难查询姓氏为“Doe”的所有记录。

您链接的文档暗示了您可能会为排序键遵循的模式示例:

LASTNAME#Doe#FIRSTNAME#John
LASTNAME#Doe#FIRSTNAME#Jane

现在,您可以使用startsWith条件“ LASTNAME#Doe#FIRSTNAME# ”轻松查询姓氏为 Doe 的所有记录。 您的记录也会自然地按姓氏、名字排序。

当您想要查找记录的名字和姓氏时不必解析该字符串,您可以通过为方便起见为“FirstName”和“LastName”添加单独的字段来复制记录中的内容。

所以你的完整记录可能看起来像这样:

{
  "PK":"some-primary-key",
  "SK":"LASTNAME#Doe#FIRSTNAME#John",
  "FirstName":"John",
  "LastName":"Doe"
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM