【问题标题】:DynamoDB best solution to making queries without using the primary keyDynamoDB 在不使用主键的情况下进行查询的最佳解决方案
【发布时间】:2018-04-23 16:04:50
【问题描述】:

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

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

它只有大约 100 行。

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

'温斯顿史密斯在哪里?'

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

'1514923在哪里?'

根据我的阅读,查询非主键值非常慢...在将 Python 与 DynamoDB 一起使用时是否有合适的解决方案?

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

【问题讨论】:

    标签: python amazon-web-services nosql amazon-dynamodb alexa


    【解决方案1】:

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

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

    次要问题:这与您使用 Python 接口这一事实无关,它适用于所有 DynamoDB 访问。

    【讨论】:

    • 如果有两条同名记录怎么办?
    • 这是一个应用程序问题。你想要哪个答案?
    猜你喜欢
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 2022-12-19
    • 2014-01-08
    • 1970-01-01
    相关资源
    最近更新 更多