Dynamodb 概念
Dynamo DB Concepts
我知道我将被问到的一些问题会很愚蠢,但我是 Dynamo Db 的新手,对此我有很多困惑。
我的问题是:
通过这个 post What is Hash and Range Primary Key? 了解哈希和范围键的概念后,我在想是否可以创建一个不属于主键的范围键钥匙。假设我想定义一个 Table Orders {**Id**,Date,Name....}
,其中 Id 作为哈希键,日期作为范围键,日期不作为 主键的一部分 .
是否可以仅使用哈希键或范围键来查询由主键作为哈希和范围键的Table?就像在 Table orders {**ID,Date**,Address,Quantity....}
中说的那样,我已经将主键定义为哈希和范围键,其中 ID 作为哈希键,日期作为范围键。我们可以使用 仅 ID 或日期 但 不能同时使用 来查询 table 吗?
创建本地二级索引和全局二级索引时投影属性是什么概念?
- 范围键是主键的一部分。现在,Range 键可能是基础架构 table 或索引(LSI、GSI)的一部分,但它始终是主键的一部分,并且始终伴随着 Hash 键。
- 一旦创建 table,就无法更改其架构。您只能对 Hash+Range table 中的特定 Hash 键的 Range 键进行查询。因此,要在给定特定范围键的哈希键上启用查询,您需要在该 table 中创建一个 GSI,它基本上会反转您的基础 table 的架构。 GSI 的散列键将是基 table 的范围键,GSI 的范围键将是基 table 的散列键。然后,您可以使用相同的查询 API 来查询 GSI,就像您已经可以用于基础 table 一样。例如,假设您有一个图书馆 table,其 Hash=owner 和 Range=BookISBN。您可以对属于 owner=Alex 的所有书籍 ISBN 或某个范围的 ISBN 执行查询,但要查找属于 Michelle 的书籍 ISBN,您必须执行不同的查询调用。现在,有了这个模式,很难找到 ISBN=123412341234 的书的所有者。事实上,您必须扫描整个 table 才能找到 ISBN=123412341234 图书的所有所有者。如果您将名为 ISBNIndex 的 GSI 添加到您的图书馆 table 且 Hash=ISBN 且 Range=owner,则您可以在 ISBNIndex GSI 上使用查询调用来查找 ISBN=123412341234 图书的所有所有者。
- 投影属性允许您 select 要包含在索引项目中的属性。索引可以通过使用替代模式来加速数据检索。请参阅 GSI and LSI. The primary keys of the base table are always included in index projections. If you select KEYS_ONLY, items in the index will only include base table and index primary keys. If you select INCLUDE, the attributes you specify in NonKeyAttributes will be included in the index in addition to the base table and index primary keys. If you select ALL, all the item attributes will be projected into the index. For more information, see the CreateTable documentation.
的文档
我知道我将被问到的一些问题会很愚蠢,但我是 Dynamo Db 的新手,对此我有很多困惑。
我的问题是:
通过这个 post What is Hash and Range Primary Key? 了解哈希和范围键的概念后,我在想是否可以创建一个不属于主键的范围键钥匙。假设我想定义一个 Table
Orders {**Id**,Date,Name....}
,其中 Id 作为哈希键,日期作为范围键,日期不作为 主键的一部分 .是否可以仅使用哈希键或范围键来查询由主键作为哈希和范围键的Table?就像在 Table
orders {**ID,Date**,Address,Quantity....}
中说的那样,我已经将主键定义为哈希和范围键,其中 ID 作为哈希键,日期作为范围键。我们可以使用 仅 ID 或日期 但 不能同时使用 来查询 table 吗?创建本地二级索引和全局二级索引时投影属性是什么概念?
- 范围键是主键的一部分。现在,Range 键可能是基础架构 table 或索引(LSI、GSI)的一部分,但它始终是主键的一部分,并且始终伴随着 Hash 键。
- 一旦创建 table,就无法更改其架构。您只能对 Hash+Range table 中的特定 Hash 键的 Range 键进行查询。因此,要在给定特定范围键的哈希键上启用查询,您需要在该 table 中创建一个 GSI,它基本上会反转您的基础 table 的架构。 GSI 的散列键将是基 table 的范围键,GSI 的范围键将是基 table 的散列键。然后,您可以使用相同的查询 API 来查询 GSI,就像您已经可以用于基础 table 一样。例如,假设您有一个图书馆 table,其 Hash=owner 和 Range=BookISBN。您可以对属于 owner=Alex 的所有书籍 ISBN 或某个范围的 ISBN 执行查询,但要查找属于 Michelle 的书籍 ISBN,您必须执行不同的查询调用。现在,有了这个模式,很难找到 ISBN=123412341234 的书的所有者。事实上,您必须扫描整个 table 才能找到 ISBN=123412341234 图书的所有所有者。如果您将名为 ISBNIndex 的 GSI 添加到您的图书馆 table 且 Hash=ISBN 且 Range=owner,则您可以在 ISBNIndex GSI 上使用查询调用来查找 ISBN=123412341234 图书的所有所有者。
- 投影属性允许您 select 要包含在索引项目中的属性。索引可以通过使用替代模式来加速数据检索。请参阅 GSI and LSI. The primary keys of the base table are always included in index projections. If you select KEYS_ONLY, items in the index will only include base table and index primary keys. If you select INCLUDE, the attributes you specify in NonKeyAttributes will be included in the index in addition to the base table and index primary keys. If you select ALL, all the item attributes will be projected into the index. For more information, see the CreateTable documentation. 的文档