【问题标题】:DynamoDB querying in 20172017 年的 DynamoDB 查询
【发布时间】:2017-06-20 14:55:34
【问题描述】:

类似的questions 很少,但看起来已经过时了。

DynamoDB 是否仍然存在查询问题?

用例:表包含带有参数的用户:姓名、电话、电子邮件、groupId、已创建等...
我想用groupId = 1name iLike 'jo'created > a_year_ago_timestamp 获取所有用户。

根据this,看起来这已经成为可能。

或者这是另一个非常昂贵的扫描操作?

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb


    【解决方案1】:

    只要您使用的是 DynamoDB 的 Query API,它并不是昂贵的扫描操作。使用 Query API 意味着您知道表的 散列键

    在上述情况下,我假设groupId 是表的哈希键。请注意,KeyConditionExpression 上的哈希键属性不能使用 CONTAINSGE(即大于)。

    所以,groupId 必须是哈希键才能使用查询 API。否则,您可能需要查看 GSI(全球二级索引)才能使用查询 API。

    显然,如果您将 Scan APIFilterExpression 一起使用,这将是一项代价高昂的操作。

    【讨论】:

    • 出了点问题。怎么可能这个数据库一直没有查询这么大的功能,现在突然有了。恐怕这可能是一些技巧,例如在第一次调用查询时创建材料视图。但是如果每次查询都不一样,它的性能可能会变慢。什么是“哈希键”?它像表标识符吗?
    • 另外,文档说“开发人员指南(API 版本 2012-08-10)”。大约一年前还没有这样的功能。为什么说是 2012 年?
    • 哈希键就像关系数据库上的主键。数据基于哈希键进行分区以获得更好的可扩展性(即水平扩展)。这是 NoSQL 数据库的主要特点。
    • 2012-08-10 是主要版本。之后,仅在 DynamoDB 上应用了补丁(即在数据库设计级别上没有引入重大更改)。这并不意味着 API 尚未更新。
    • 正如我之前所说,您可以实现这一点。但是,它在性能和成本方面效率不高。如果您知道哈希键,DynamoDB 会为您提供更好的结果。否则,一切都是全表扫描,它会消耗读取容量单位(这与成本直接相关)。替代选项是为您的用例创建相应的索引。索引的哈希键(即 GSI)不必是唯一的。
    猜你喜欢
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多