[英]Is using json as sort key/partition key value good practice in DynamoDB?
尝试为 DynamoDB 表定义架构。 两个以上的值决定一行。
放置这些键值的一种潜在解决方案是让排序键包含多个值。 正如此处指定的那样。
受这种方法的启发,我在考虑不使用简单的定界符将值连接在一起,而是使用 JSON 或对象的任何其他字符串表示形式(例如:Jackson 翻译的字符串)作为排序键的值应该能够实现类似的目标并且易于转换。
但是,我担心这样做 - 添加排序键的长度 - 会降低 DynamoDB 的性能吗? 使用复杂的字符串作为排序键可以吗?
TL;DR:对于您的排序键,您可以使用任何字符串(在字节限制内)来区分主键中的记录。 但是如果你对它很聪明,你可以更好地利用它进行排序和过滤。
密钥长度有限制:
根据主键和排序键的长度,我不知道有任何显着的性能差异。 我确信确保性能是 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.