DynamoDB 在不使用主键的情况下进行查询的最佳解决方案

DynamoDB best solution to making queries without using the primary key

我在 DyamoDB 中有一个与此类似的 table:

StaffID, Name,          Email,              Office
1514923  Winston Smith, SmithW@company.com, 101

它只有大约 100 行。

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

'Where is Winston Smith?'

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

'Where is 1514923?'

根据我的阅读,查询非主键值非常慢...在使用 Python 和 DynamoDB 时是否有 suitable 解决方案?

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

这里有两种方法,具体取决于您的应用程序:

  1. 如果您只想通过 Name 字段查询此 table,则更改 table 使其具有分区键 Name 而不是StaffID。 DynamoDB 不是 SQL - 除非您实际使用它,否则无需将所有内容都键入 ID 字段。 (请注意,您实际上不能 "change" 现有 DynamoDB table 上的分区键 - 您必须重建 table)。
  2. 如果您想通过 StaffIDName 高效查询,请使用 Name 字段为 table 创建一个 global secondary index。请注意,全局二级索引需要它们自己配置的吞吐量和存储空间,这两者当然是等价的。

除此之外:这与您使用 Python 接口这一事实无关,它适用于所有 DynamoDB 访问。