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 - 当它们变得太大时将它们分成不同的用户组?
这里有两种方法,具体取决于您的应用程序:
- 如果您只想通过
Name
字段查询此 table,则更改 table 使其具有分区键 Name
而不是StaffID
。 DynamoDB 不是 SQL - 除非您实际使用它,否则无需将所有内容都键入 ID 字段。 (请注意,您实际上不能 "change" 现有 DynamoDB table 上的分区键 - 您必须重建 table)。
- 如果您想通过
StaffID
和 Name
高效查询,请使用 Name
字段为 table 创建一个 global secondary index。请注意,全局二级索引需要它们自己配置的吞吐量和存储空间,这两者当然是等价的。
除此之外:这与您使用 Python 接口这一事实无关,它适用于所有 DynamoDB 访问。
我在 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 - 当它们变得太大时将它们分成不同的用户组?
这里有两种方法,具体取决于您的应用程序:
- 如果您只想通过
Name
字段查询此 table,则更改 table 使其具有分区键Name
而不是StaffID
。 DynamoDB 不是 SQL - 除非您实际使用它,否则无需将所有内容都键入 ID 字段。 (请注意,您实际上不能 "change" 现有 DynamoDB table 上的分区键 - 您必须重建 table)。 - 如果您想通过
StaffID
和Name
高效查询,请使用Name
字段为 table 创建一个 global secondary index。请注意,全局二级索引需要它们自己配置的吞吐量和存储空间,这两者当然是等价的。
除此之外:这与您使用 Python 接口这一事实无关,它适用于所有 DynamoDB 访问。