Python DynamoDB不使用主键进行查询的最佳解决方案

Python DynamoDB不使用主键进行查询的最佳解决方案,python,amazon-web-services,nosql,amazon-dynamodb,alexa,Python,Amazon Web Services,Nosql,Amazon Dynamodb,Alexa,我在DyamoDB中有一个类似的表: StaffID, Name, Email, Office 1514923 Winston Smith, SmithW@company.com, 101 它只有大约100行 我正在试验亚马逊的Alexa,以及将其用于基于语音的查询的可能性,例如 “温斯顿·史密斯在哪里?” 问题是,当使用Alexa函数从表中提取结果时,它永远不会通过主键StaffID——因为用户不会询问: “1514923在哪里?” 据我所知,查

我在DyamoDB中有一个类似的表:

StaffID, Name,          Email,              Office
1514923  Winston Smith, SmithW@company.com, 101
它只有大约100行

我正在试验亚马逊的Alexa,以及将其用于基于语音的查询的可能性,例如

“温斯顿·史密斯在哪里?”

问题是,当使用Alexa函数从表中提取结果时,它永远不会通过主键
StaffID
——因为用户不会询问:

“1514923在哪里?”

据我所知,查询非主键值的速度非常慢。。。在使用Python和DynamoDB时,是否有合适的解决方案


我知道只有100行是可以忽略不计的,但是我想用正确的、行业标准的方式来做事情。或者,对于这样的情况,最好的解决方案是简单地扫描表格——当表格太大时,将它们分成不同的用户组?

根据您的应用程序,这里有两种方法:

  • 如果您只想通过
    Name
    字段查询此表,请更改该表,使其分区键为
    Name
    ,而不是
    StaffID
    。DynamoDB不是SQL——除非您实际使用它,否则不需要将所有内容都键入ID字段。(注意,您实际上不能“更改”现有DynamoDB表上的分区键-您必须重新生成该表)
  • 如果您希望通过
    StaffID
    Name
    有效地查询,请使用
    Name
    字段为表创建一个查询。请注意,全局二级索引需要它们自己提供的吞吐量和存储,当然这两者都是等价的

  • 旁白:这与您使用Python接口无关,它适用于所有DynamoDB访问。

    如果有两个同名记录,情况如何?这是应用程序的问题。你想要哪个答案?