建立索引 - Amazon DynamoDB

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

建立索引

將中的CREATE INDEX陳述式SQL與 Amazon DynamoDB 中的UpdateTable作業進行比較。

建立索引 SQL

在關聯式資料庫中,索引是一種資料結構,可讓您快速查詢資料表中的不同資料行。您可以使用CREATE INDEXSQL陳述式將索引新增至現有資料表,並指定要建立索引的資料行。在索引建立後,您可以如常地查詢資料表中的資料,但資料庫現在已可使用索引在快速尋找資料表中的指定資料列,而不用掃描整個資料表。

在您建立索引後,資料庫會為您維護。每當您修改資料表中的資料時,索引就會自動修改,以反映資料表的變更。

在「我」中SQL,您將創建如下所示的索引。

CREATE INDEX GenreAndPriceIndex ON Music (genre, price);

在 DynamoDB 中建立索引

在 DynamoDB 中,您可以建立及使用次要索引來達到類似目的。

DynamoDB 中的索引與關聯式資料庫中的索引不同。在您建立次要索引時,必須指定其索引鍵屬性,即一個分割區索引鍵和一個排序索引鍵。在建立次要索引後,您便可以 QueryScan 該索引,正如您對資料表所做的那樣。DynamoDB 沒有查詢最佳化程式,因此只有在您 QueryScan 次要索引時才會使用此類索引。

DynamoDB 支援兩種不同的索引:

  • 全域次要索引:索引的主索引鍵可以是資料表中任兩個屬性。

  • 本機次要索引:索引的分割區索引鍵必須與資料表的分割區索引鍵相同。但是,排序索引鍵可以是其他任何屬性。

DynamoDB 會確認次要索引中的資料最終與其資料表一致。您可以對資料表或本機次要索引請求高度一致的 QueryScan 操作。但是,全域次要索引只支援最終一致性。

您可以使用 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 操作來檢視此屬性。