3

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

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

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

我正在为如何对二级索引进行排序而苦苦挣扎。例如,如果我们有一个名为 Votes 的列,你如何做 Most Votes?我的解释是,您只能使用我已经在使用的范围索引进行排序。

4

2 回答 2

5

更新

AWS 刚刚宣布了备受期待的 Amazon DynamoDB 全球二级索引的普遍可用性,这些索引正在解决下面进一步讨论的本地二级索引的限制:

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

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

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


更正

正如 vartec 正确指出的那样,在宣布本地二级索引的那一天,我一直在提前添加这些信息,而没有正确分析手头的问题,实际上这些问题并不适用——具有讽刺意味的是,我只是强调了这一点我自己在稍后对另一个问题的评论中

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

感谢vartec发现此错误,并为此处的误导表示歉意。


初始(错误)答案

Amazon DynamoDB刚刚宣布支持本地二级索引 来解决您的使用案例

[...] 我们将最新的功能称为本地二级索引 (LSI)。虽然 DynamoDB 已经允许您基于表的主键执行低延迟查询,即使规模非常大,LSI 现在让您能够对表中的其他属性(或列)执行快速查询。这使您能够执行更丰富的查询,同时仍然满足响应式、可扩展应用程序的低延迟需求。

另请参阅介绍性博客文章Amazon DynamoDB 的本地二级索引以获取更详细的说明。

与 AWS 的往常一样,新功能首先发布时带有一个受限的功能集,随着时间的推移将会扩展:

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

于 2013-04-18T14:29:02.130 回答
2

看起来这是不可能的,您只能按范围哈希键排序

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

于 2012-12-18T13:02:04.770 回答