DynamoDB有序列表

时间:2012-05-22 11:10:38

标签: amazon-dynamodb

我正在尝试将List存储为DynamoDB属性,但我需要能够检索列表顺序。目前,我提出的唯一解决方案是通过在值上附加一个键并将完整值转换为String然后将其存储为列表来创建自定义哈希映射。

例如。 key = position1,value = value1,要存储在DB =“position1#value1”

中的字符串

要使用列表,我需要过滤掉,组织,子串并重新转换为原始类型。这似乎是一个漫长的过程,但目前它是我能想到的唯一解决方案。

有没有人有更好的解决方案或想法?

3 个答案:

答案 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哈希桶时,才支持针对“时间”的范围查询。