Amazon DynamoDB
开发人员指南 (API Version 2012-08-10)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

管理索引

索引使您能够访问替代查询模式,并可以加快查询速度。本节将 SQL 和 DynamoDB 中的索引创建和使用进行了比较和对比。

无论您使用的是关系数据库还是 DynamoDB,在创建索引时都应谨慎。只要对表进行写入,就必须更新表的所有索引。在具有大型表的写入密集型环境中,这会占用大量系统资源。在只读环境或主读环境中,这算不上一个问题 - 不过,您应确保索引实际上由应用程序使用,而不只是占用空间。

创建索引

SQL

在关系数据库中,索引是一个数据结构,可让您对表中的不同的列执行快速查询。您可以使用 CREATE INDEX SQL 语句将索引添加到现有表,并指定要建立索引的列。在创建索引后,您可以照常查询表中的数据,但现在数据库可使用索引快速查找表中的指定行,而不是扫描整个表。

在创建一个索引后,数据库将为您维护此索引。只要您修改表中的数据,就会自动更改索引以反映表中的更改。

在 MySQL 中,您可以创建如下所示的索引:

Copy
CREATE INDEX GenreAndPriceIndex ON Music (genre, price);

DynamoDB

在 DynamoDB 中,您可以创建和使用二级索引来实现类似目的。

DynamoDB 中的索引与其关系对应项不同。当您创建二级索引时,必须指定其键属性 - 分区键和排序键。在创建二级索引后,您可以对它执行 QueryScan 操作,就如同对表执行这些操作一样。DynamoDB 没有查询优化程序,因此,仅在您对二级索引执行 QueryScan 操作时使用它。

DynamoDB 支持两种不同的索引:

  • 全局二级索引 - 索引的主键可以是其表中的任意两个属性。

  • 本地二级索引 - 索引的分区键必须与其表的分区键相同。不过,排序键可以是任何其他属性。

DynamoDB 确保二级索引中的数据最终与其表保持一致。您可以请求对表或local secondary index执行强一致性 QueryScan 操作。但是,全局二级索引仅支持最终一致性。

可使用 UpdateTable 操作并指定 GlobalSecondaryIndexUpdates 来将全局二级索引添加到现有表:

Copy
{ TableName: "Music", AttributeDefinitions:[ {AttributeName: "Genre", AttributeType: "S"}, {AttributeName: "Price", AttributeType: "N"} ], GlobalSecondaryIndexUpdates: [ { Create: { IndexName: "GenreAndPriceIndex", KeySchema: [ {AttributeName: "Genre", KeyType: "HASH"}, //Partition key {AttributeName: "Price", KeyType: "RANGE"}, //Sort key ], Projection: { "ProjectionType": "ALL" }, ProvisionedThroughput: { "ReadCapacityUnits": 1,"WriteCapacityUnits": 1 } } } ] }

您必须向 UpdateTable 提供以下参数:

  • TableName – 索引将关联到的表。

  • AttributeDefinitions – 索引的键架构属性的数据类型。

  • GlobalSecondaryIndexUpdates – 有关要创建的索引的详细信息:

    • IndexName - 索引的名称。

    • KeySchema – 用于索引主键的属性。

    • Projection - 表中要复制到索引的属性。在此情况下,ALL 意味着复制所有属性。

    • ProvisionedThroughput – 每秒需对此索引执行的读取和写入次数。 (它与表的预置吞吐量设置是分开的。)

在此操作中,会将表中的数据回填到新索引。在回填期间,表保持可用。但索引未准备就绪,直至其 Backfilling 属性从 true 变为 false。您可以使用 DescribeTable 操作查看此属性。

注意

有关使用 UpdateTable 的代码示例,请参阅Amazon DynamoDB 入门指南

本页内容: