我有一个dynamodb表,其中分区键是userid均匀分布的。表存储关于用户信息的数据,例如(用户持有的姓名,电子邮件,国家和门户卡 - 例如用户1具有卡1,卡2,卡3(最多10类卡),其中卡1的详细信息为(金卡,购买日期 - yyyy- mm-dd)。用户可以通过用户标识对表进行查询。
为实现这一目标,我可以通过两种方式设计我的架构: -
哪种方法更好?
由于
答案 0 :(得分:0)
虽然DynamoDB支持Document数据类型(Map,List等),但查询API不是很强大。在您的设计方法1中,如果您将数据转换为DynamoDB项目,您实际上将最终得到复杂对象(即card1值是具有两个属性purchaseate和type的对象),用于cards属性。第三个查询模式需要按purchaseate过滤并键入哪个DynamoDB API不支持,因为它位于MAP数据类型的另一个对象内,而不是MAP中的某个标量属性。
MAP的简单对象: -
{"purchasedate":"yyyy-mm-dd","type":"gold"}
MAP的复杂对象: -
{"card1":{"purchasedate":"yyyy-mm-dd","type":"gold"},"card2":{"purchasedate":"yyyy-mm-dd","type":"platinum"}}
因此,设计方法2 更好。只要您有标量属性(即字符串,数字,布尔值),您就可以通过 FilterExpression
中不同的属性组合查询表格。