【问题标题】:Dynamo DB ConceptsDynamo 数据库概念
【发布时间】:2015-07-06 21:44:05
【问题描述】:

我知道我将被问到的一些问题会很愚蠢,但我是 Dynamo Db 的新手,对此我有很多困惑。

我的问题是:

  1. 通过这篇文章What is Hash and Range Primary Key? 了解哈希和范围键的概念后,我认为是否可以创建一个不属于主键的范围键。假设我想定义一个表 Orders {**Id**,Date,Name....},其中 Id 作为哈希键,日期作为范围键,日期不作为 主键的一部分。

  2. 是否可以仅使用哈希键或范围键查询包含主键作为哈希和范围键的表?就像在表orders {**ID,Date**,Address,Quantity....} 中一样,我将主键定义为散列和范围键,ID 为散列键,日期 为范围键。我们可以使用仅 ID 或日期不能同时使用两者来查询表吗?

  3. 在创建本地二级索引和全局二级索引时,投影属性的概念是什么?

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb


    【解决方案1】:
    1. 范围键是主键的一部分。现在,Range 键可能是基表架构或索引(LSI、GSI)的一部分,但它始终是主键的一部分,并且始终伴随着一个哈希键。
    2. 一旦创建表,就无法更改其架构。您只能对 Hash+Range 表中特定 Hash 键的 Range 键进行查询。因此,要在给定特定 Range 键的情况下启用对 Hash 键的查询,您需要在该表中创建一个 GSI,该 GSI 基本上反转了基表的架构。 GSI 的哈希键将是基表的范围键,而 GSI 的范围键将是基表的哈希键。然后,您可以使用已用于基表的相同查询 API 查询 GSI。例如,假设您有一个具有 Hash=owner 和 Range=BookISBN 的 Library 表。您可以对属于 owner=Alex 的所有图书 ISBN 或一系列 ISBN 执行查询,但要查找属于 Michelle 的图书 ISBN,您必须执行不同的查询调用。现在,使用此模式,很难找到 ISBN=123412341234 的图书的所有者。实际上,您必须扫描整个表才能找到 ISBN=123412341234 的图书的所有所有者。如果您将名为 ISBNIndex 且 Hash=ISBN 且 Range=owner 的 GSI 添加到您的图书馆表中,则可以对 ISBNIndex GSI 使用查询调用来查找 ISBN=123412341234 的图书的所有所有者。
    3. 投影属性允许您选择要包含在索引项目中的属性。索引可以通过使用替代模式来加速数据检索。请参阅 GSILSI 的文档。基表的主键始终包含在索引投影中。如果您选择 KEYS_ONLY,则索引中的项目将仅包括基表和索引主键。如果选择 INCLUDE,则在 NonKeyAttributes 中指定的属性将包含在索引中,除了基表和索引主键。如果选择 ALL,则所有项目属性都将投影到索引中。如需更多信息,请参阅CreateTable documentation

    【讨论】:

    • 我得到了第一个和第三个答案,但对第二个有点困惑。据我了解,我们可以只使用散列键而不是范围键来查询。我说的对吗??
    • @user3697669 在Query操作中需要hash键条件(必须是EQ),而范围键条件(可以是任何可排序的运算符)是可选的。
    猜你喜欢
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 2013-07-15
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多