DynamoDB二级排序

时间:2012-12-17 11:04:47

标签: amazon-dynamodb

我正在评估是否可以将DynamoDB用于我们的下一个项目,我们正在构建的内容与博客平台非常相似,这里是一个简单的表格

Blog Post
  ID - primary hash key
  Title
  DateCreated - primary range key
  Votes

我已经阅读了足够的知识如何列表 - 博客帖子列表,分页 - 使用上次获取的索引,获取帖子详细信息 - 获取一行,我将使用DateCreate进行排序,这是我的范围键。

我在如何对二级索引进行排序方面苦苦挣扎。例如,如果我们有一个名为Votes的列,你如何做大多数投票?我的解释是你只能使用我已经使用的范围索引进行排序。

2 个答案:

答案 0 :(得分:5)

更新

AWS刚刚宣布了备受期待的Global Secondary Indexes for Amazon DynamoDB的普遍可用性,它们正在解决下面进一步讨论的Local Secondary Indexes的限制:

  

您现在可以使用项目主键以外的属性创建索引并执行查找。 [...]

     

现在,您可以在创建表时创建最多五个全局二级索引,每个表都引用一个哈希键或一个哈希键和一个范围键。您还可以创建最多五个本地二级索引,并且可以选择将表的一些或全部属性投影到每个表的索引中。

有关这两种模式之间选择的详细信息,请参阅博客文章。


校正

正确地pointed out by vartec,我已经超越了自己,在Local Secondary Indexes宣布的那天添加了这些信息而没有正确分析手头的问题,其中那些事实上没有适用 - 具有讽刺意味的是,我只是在later comment on another question

中强调了这一点
  

[...]但请注意,本地是一个至关重要的限制:本地二级索引是维护给定哈希键的备用范围键的数据结构 - 虽然这涵盖了许多现实世界的场景,它不适用于任意非主要关键字段查询,如手头的问题。

感谢vartec发现此错误,并在此处误导道歉。


初始(错误)回答

Amazon DynamoDB刚刚宣布Support for Local Secondary Indexes 来解决您的用例

  

[...]我们将最新的功能称为本地   二级指数(LSI)。虽然DynamoDB已经允许您执行   基于表的主键的低延迟查询,即使在   巨大的规模,LSI现在将为您提供快速执行的能力   查询表中的其他属性(或列)。这个   使您能够在仍然会议时执行更丰富的查询   响应性,可扩展的应用程序的低延迟需求。

有关更详细的说明,另请参阅介绍性博客文章Local Secondary Indexes for Amazon DynamoDB

与AWS一样,新功能首先使用受约束的功能集发布,随着时间的推移将会扩展:

  

今天,必须在创建时定义本地二级索引   您的DynamoDB表。将来,我们计划为您提供   能够为现有表添加或删除LSI 。如果你想装备   您现在可以立即将一个现有的DynamoDB表转换为本地二级索引   可以使用Elastic Map Reduce从现有表中导出数据,   并使用LSI将其导入新表。 [强调我的]

答案 1 :(得分:2)

看起来这是不可能的,你只能按范围hashkey

排序

我要在内存中加载表并在内存中对其进行排序。