创建索引
将 SQL 中的 CREATE INDEX
语句与 Amazon DynamoDB 中的 UpdateTable
操作进行比较。
SQL
在关系数据库中,索引是一个数据结构,可让您对表中的不同的列执行快速查询。您可以使用 CREATE
INDEX
SQL 语句将索引添加到现有表,并指定要建立索引的列。在创建索引后,您可以照常查询表中的数据,但现在数据库可使用索引快速查找表中的指定行,而不是扫描整个表。
在创建一个索引后,数据库将为您维护此索引。只要您修改表中的数据,就会自动更改索引以反映表中的更改。
在 MySQL 中,您可以创建如下所示的索引。
CREATE INDEX GenreAndPriceIndex ON Music (genre, price);
DynamoDB
在 DynamoDB 中,您可以创建和使用二级索引来实现类似目的。
DynamoDB 中的索引与其关系对应项不同。当您创建二级索引时,必须指定其键属性—分区键和排序键。创建二级索引后,可以 Query
或 Scan
,就像对表一样。DynamoDB 没有查询优化程序,因此仅在 Query
或 Scan
时使用二级索引。
DynamoDB 支持两种不同的索引:
-
全局二级索引 – 索引的主键可以是其表中的任意两个属性。
-
本地二级索引 – 索引的分区键必须与其表的分区键相同。不过,排序键可以是任何其他属性。
DynamoDB 确保二级索引中的数据最终与其表保持一致。您可以请求对表或本地二级索引执行强一致性 Query
或 Scan
操作。但是,全局二级索引仅支持最终一致性。
可以使用 UpdateTable
操作并指定 GlobalSecondaryIndexUpdates
,将全局二级索引添加到现有表。
{ 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: { // Only specified if using provisioned mode "ReadCapacityUnits": 1,"WriteCapacityUnits": 1 } } } ] }
您必须向 UpdateTable
提供以下参数:
-
TableName
– 索引将关联到的表。 -
AttributeDefinitions
– 索引的键架构属性的数据类型。 -
GlobalSecondaryIndexUpdates
– 有关要创建的索引的详细信息:-
IndexName
– 索引的名称。 -
KeySchema
– 用于索引主键的属性。 -
Projection
– 表中要复制到索引的属性。在此情况下,ALL
意味着复制所有属性。 -
ProvisionedThroughput (for provisioned tables)
– 每秒需对此索引执行的读取和写入次数。(它与表的预置吞吐量设置是分开的。)
-
在此操作中,会将表中的数据回填到新索引。在回填期间,表保持可用。但索引未准备就绪,直至其 Backfilling
属性从 true 变为 false。您可以使用 DescribeTable
操作查看此属性。
有关使用 UpdateTable
的代码示例,请参阅 DynamoDB 和 Amazon SDK 入门。