Dynamo DB Concepts

时间:2015-04-28 07:12:59

标签: amazon-web-services amazon-dynamodb

我知道我要问的一些问题会非常愚蠢,但我是Dynamo Db的新手,我对它有很多困惑。

我的问题是:

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

  2. 是否可以仅使用哈希键或范围键查询包含主键的表作为哈希和范围键?如表orders {**ID,Date**,Address,Quantity....}中所述,我已将主键定义为哈希和范围键,其中 ID 为哈希键,日期为范围键。我们可以使用仅ID或日期查询表格,但不是吗?

  3. 创建本地二级指数和全球二级指数时,预测属性的概念是什么?

1 个答案:

答案 0 :(得分:4)

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