我正在尝试将List存储为DynamoDB属性,但我需要能够检索列表顺序。目前,我提出的唯一解决方案是通过在值上附加一个键并将完整值转换为String然后将其存储为列表来创建自定义哈希映射。
例如。 key = position1,value = value1,要存储在DB =“position1#value1”
中的字符串要使用列表,我需要过滤掉,组织,子串并重新转换为原始类型。这似乎是一个漫长的过程,但目前它是我能想到的唯一解决方案。
有没有人有更好的解决方案或想法?
答案 0 :(得分:19)
新添加的文档类型中的List type应该有所帮助。
文档数据类型
DynamoDB支持List和Map数据类型,它们可以嵌套以表示复杂的数据结构。
- 列表类型包含有序的值集合。
- Map类型包含无序的名称 - 值对集合。
列表和地图非常适合存储JSON文档。 List数据类型类似于JSON数组,Map数据类型类似于JSON对象。可以存储在List或Map元素中的数据类型没有限制,并且元素不必具有相同的类型。
答案 1 :(得分:3)
我不相信可以将有序列表存储为属性,因为DynamoDB仅支持单值和(无序)集属性。但是,存储一串逗号分隔值(或其他一些分隔符方案)的性能开销可能非常小,因为行的所有属性必须一起低于64KB。
(来源:http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/DataModel.html)
答案 2 :(得分:0)
为您的primary keys添加范围属性。
范围查询的复合主键
复合主键使您可以在表中指定共同形成唯一主索引的两个属性。表中的所有项都必须具有这两个属性。一个用作“散列分区属性”,另一个用作“范围属性”。例如,您可能有一个“状态更新”表,其中复合主键由“UserID”组成(散列属性,用于分区工作负载)跨多个服务器)和“时间”(范围属性)。然后,您可以运行查询以获取以下任一项:1)由UserID和Time值的组合唯一标识的特定项目; 2)特定散列“桶”的所有项目 - 在这种情况下是UserID;或3)特定时间范围内特定用户ID的所有项目。只有在指定了UserID哈希桶时,才支持针对“时间”的范围查询。