更新
AWS 刚刚宣布了备受期待的 Amazon DynamoDB 全球二级索引的普遍可用性,这些索引正在解决下面进一步讨论的本地二级索引的限制:
您现在可以使用项目主键以外的属性创建索引并执行查找。[...]
现在,您在创建表时最多可以创建五个全局二级索引,每个索引都引用一个哈希键或一个哈希键和一个范围键。您还可以创建最多五个本地二级索引,并且可以选择将表的部分或全部属性投影到每个表的索引中。
有关这两种模型之间选择的更多详细信息,请参阅博客文章。
更正
正如 vartec 正确指出的那样,在宣布本地二级索引的那一天,我一直在提前添加这些信息,而没有正确分析手头的问题,实际上这些问题并不适用——具有讽刺意味的是,我只是强调了这一点我自己在稍后对另一个问题的评论中:
[...] 但是,请注意本地是一个关键的限制:本地二级索引是一种数据结构,它为给定的哈希键维护备用范围键 - 虽然这涵盖了许多现实世界的场景,但它不适用于任意非主键字段查询,例如手头的问题。
感谢vartec发现此错误,并为此处的误导表示歉意。
初始(错误)答案
Amazon DynamoDB刚刚宣布支持本地二级索引 来解决您的使用案例:
[...] 我们将最新的功能称为本地二级索引 (LSI)。虽然 DynamoDB 已经允许您基于表的主键执行低延迟查询,即使规模非常大,LSI 现在让您能够对表中的其他属性(或列)执行快速查询。这使您能够执行更丰富的查询,同时仍然满足响应式、可扩展应用程序的低延迟需求。
另请参阅介绍性博客文章Amazon DynamoDB 的本地二级索引以获取更详细的说明。
与 AWS 的往常一样,新功能首先发布时带有一个受限的功能集,随着时间的推移将会扩展:
现在,必须在创建 DynamoDB 表时定义本地二级索引。将来,我们计划为您提供为现有表添加或删除 LSI 的能力。如果您想立即为现有的 DynamoDB 表配备本地二级索引,您可以使用 Elastic Map Reduce 从现有表中导出数据,然后使用 LSI 将其导入到新表中。[强调我的]