本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用本機次要索引:Java
您可以使用 AWS SDK for Java Document API 建立含有一或多個本機次要索引的 Amazon DynamoDB 資料表、描述資料表上的索引,以及使用索引執行查詢。
下列是使用 AWS SDK for Java Document API 執行資料表操作的一般步驟。
-
建立
DynamoDB
類別的執行個體。 -
透過建立對應的請求物件,為操作提供必要及選用的參數。
-
呼叫您在前一步驟中建立之用戶端所提供的適當方法。
使用本機次要索引建立資料表
您必須同時建立資料表和本機次要索引。若要執行這項操作,請使用 createTable
方法,並提供一或多個本機次要索引的規格。以下 Java 程式碼範例會建立資料表來保存音樂收藏中歌曲的相關資訊。分割區索引鍵為 Artist
,而排序索引鍵為 SongTitle
。次要索引 AlbumTitleIndex
有助於依照專輯標題查詢。
以下是使用 DynamoDB Document API 建立具有本機次要索引的資料表的步驟。
-
建立
DynamoDB
類別的執行個體。 -
建立
CreateTableRequest
類別的執行個體,以提供請求資訊。您必須提供資料表名稱、其主索引鍵,以及佈建的輸送量數值。對於本機次要索引,您必須提供索引名稱、索引排序索引鍵的名稱和資料類型、索引的索引鍵結構描述以及屬性投影。
-
以參數形式提供請求物件,以便呼叫
createTable
方法。
下列 Java 程式碼範例示範上述步驟。程式碼會建立一個資料表 (Music
) 與次要索引 AlbumTitle
屬性。資料表分割區索引鍵和排序索引鍵以及索引排序索引鍵,是唯一投影到索引的屬性。
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build(); DynamoDB dynamoDB = new DynamoDB(client); String tableName = "Music"; CreateTableRequest createTableRequest = new CreateTableRequest().withTableName(tableName); //ProvisionedThroughput createTableRequest.setProvisionedThroughput(new ProvisionedThroughput().withReadCapacityUnits((long)5).withWriteCapacityUnits((long)5)); //AttributeDefinitions ArrayList<AttributeDefinition> attributeDefinitions= new ArrayList<AttributeDefinition>(); attributeDefinitions.add(new AttributeDefinition().withAttributeName("Artist").withAttributeType("S")); attributeDefinitions.add(new AttributeDefinition().withAttributeName("SongTitle").withAttributeType("S")); attributeDefinitions.add(new AttributeDefinition().withAttributeName("AlbumTitle").withAttributeType("S")); createTableRequest.setAttributeDefinitions(attributeDefinitions); //KeySchema ArrayList<KeySchemaElement> tableKeySchema = new ArrayList<KeySchemaElement>(); tableKeySchema.add(new KeySchemaElement().withAttributeName("Artist").withKeyType(KeyType.HASH)); //Partition key tableKeySchema.add(new KeySchemaElement().withAttributeName("SongTitle").withKeyType(KeyType.RANGE)); //Sort key createTableRequest.setKeySchema(tableKeySchema); ArrayList<KeySchemaElement> indexKeySchema = new ArrayList<KeySchemaElement>(); indexKeySchema.add(new KeySchemaElement().withAttributeName("Artist").withKeyType(KeyType.HASH)); //Partition key indexKeySchema.add(new KeySchemaElement().withAttributeName("AlbumTitle").withKeyType(KeyType.RANGE)); //Sort key Projection projection = new Projection().withProjectionType(ProjectionType.INCLUDE); ArrayList<String> nonKeyAttributes = new ArrayList<String>(); nonKeyAttributes.add("Genre"); nonKeyAttributes.add("Year"); projection.setNonKeyAttributes(nonKeyAttributes); LocalSecondaryIndex localSecondaryIndex = new LocalSecondaryIndex() .withIndexName("AlbumTitleIndex").withKeySchema(indexKeySchema).withProjection(projection); ArrayList<LocalSecondaryIndex> localSecondaryIndexes = new ArrayList<LocalSecondaryIndex>(); localSecondaryIndexes.add(localSecondaryIndex); createTableRequest.setLocalSecondaryIndexes(localSecondaryIndexes); Table table = dynamoDB.createTable(createTableRequest); System.out.println(table.getDescription());
您必須等到 DynamoDB 建立資料表,並將資料表狀態設定為 ACTIVE
。之後,您可以開始將資料項目放入資料表中。
使用本機次要索引描述資料表
若要取得資料表上本機次要索引的資訊,請使用 describeTable
方法。對於每個索引,您可以存取其名稱、索引鍵結構描述和投影屬性。
以下是使用 AWS SDK for Java Document API 存取資料表的本機次要索引資訊的步驟。
-
建立
DynamoDB
類別的執行個體。 -
建立
Table
類別的執行個體。您必須提供資料表名稱。 -
在
Table
物件上呼叫describeTable
方法。
下列 Java 程式碼範例示範上述步驟。
範例
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build(); DynamoDB dynamoDB = new DynamoDB(client); String tableName = "Music"; Table table = dynamoDB.getTable(tableName); TableDescription tableDescription = table.describe(); List<LocalSecondaryIndexDescription> localSecondaryIndexes = tableDescription.getLocalSecondaryIndexes(); // This code snippet will work for multiple indexes, even though // there is only one index in this example. Iterator<LocalSecondaryIndexDescription> lsiIter = localSecondaryIndexes.iterator(); while (lsiIter.hasNext()) { LocalSecondaryIndexDescription lsiDescription = lsiIter.next(); System.out.println("Info for index " + lsiDescription.getIndexName() + ":"); Iterator<KeySchemaElement> kseIter = lsiDescription.getKeySchema().iterator(); while (kseIter.hasNext()) { KeySchemaElement kse = kseIter.next(); System.out.printf("\t%s: %s\n", kse.getAttributeName(), kse.getKeyType()); } Projection projection = lsiDescription.getProjection(); System.out.println("\tThe projection type is: " + projection.getProjectionType()); if (projection.getProjectionType().toString().equals("INCLUDE")) { System.out.println("\t\tThe non-key projected attributes are: " + projection.getNonKeyAttributes()); } }
查詢本機次要索引
您可以依照與 Query
資料表大致相同的方式在本機次要索引上使用 Query
操作。您必須指定索引名稱、索引排序索引鍵的查詢準則,以及您要傳回的屬性。在本例中,索引是 AlbumTitleIndex
,而索引排序索引鍵為 AlbumTitle
。
傳回的唯一屬性是已投影到索引的屬性。您也可以修改此查詢來選擇非索引鍵屬性,但這需要相對昂貴的資料表擷取活動。如需資料表擷取的詳細資訊,請參閱 屬性投影。
以下是使用 AWS SDK for Java Document API 查詢本機次要索引的步驟。
-
建立
DynamoDB
類別的執行個體。 -
建立
Table
類別的執行個體。您必須提供資料表名稱。 -
建立
Index
類別的執行個體。您必須提供索引名稱。 -
呼叫
Index
類別的query
方法。
下列 Java 程式碼範例示範上述步驟。
範例
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build(); DynamoDB dynamoDB = new DynamoDB(client); String tableName = "Music"; Table table = dynamoDB.getTable(tableName); Index index = table.getIndex("AlbumTitleIndex"); QuerySpec spec = new QuerySpec() .withKeyConditionExpression("Artist = :v_artist and AlbumTitle = :v_title") .withValueMap(new ValueMap() .withString(":v_artist", "Acme Band") .withString(":v_title", "Songs About Life")); ItemCollection<QueryOutcome> items = index.query(spec); Iterator<Item> itemsIter = items.iterator(); while (itemsIter.hasNext()) { Item item = itemsIter.next(); System.out.println(item.toJSONPretty()); }