我正在评估是否可以将DynamoDB用于我们的下一个项目,我们正在构建的内容与博客平台非常相似,这里是一个简单的表格
Blog Post
ID - primary hash key
Title
DateCreated - primary range key
Votes
我已经阅读了足够的知识如何列表 - 博客帖子列表,分页 - 使用上次获取的索引,获取帖子详细信息 - 获取一行,我将使用DateCreate进行排序,这是我的范围键。
我在如何对二级索引进行排序方面苦苦挣扎。例如,如果我们有一个名为Votes的列,你如何做大多数投票?我的解释是你只能使用我已经使用的范围索引进行排序。
答案 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
排序我要在内存中加载表并在内存中对其进行排序。