Interrogazione di indici secondari globali con SDK for Java 1.x - Amazon DynamoDB

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Interrogazione di indici secondari globali con SDK for Java 1.x

Puoi usare Amazon DynamoDB Accelerator DAX () per interrogare indici secondari globali utilizzando interfacce programmatiche DynamoDB.

L'esempio seguente mostra come utilizzare per interrogare l'indice secondario CreateDateIndex globale creato DAX in Esempio: indici secondari globali utilizzando il documento. AWS SDK for Java API

La classe DAXClient crea l'istanza degli oggetti client necessari per interagire con le interfacce programmatiche di DynamoDB.

import com.amazon.dax.client.dynamodbv2.AmazonDaxClientBuilder; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper; import com.amazonaws.services.dynamodbv2.document.DynamoDB; import com.amazonaws.util.EC2MetadataUtils; import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; public class DaxClient { private static final String region = EC2MetadataUtils.getEC2InstanceRegion(); DynamoDB getDaxDocClient(String daxEndpoint) { System.out.println("Creating a DAX client with cluster endpoint " + daxEndpoint); AmazonDaxClientBuilder daxClientBuilder = AmazonDaxClientBuilder.standard(); daxClientBuilder.withRegion(region).withEndpointConfiguration(daxEndpoint); AmazonDynamoDB client = daxClientBuilder.build(); return new DynamoDB(client); } DynamoDBMapper getDaxMapperClient(String daxEndpoint) { System.out.println("Creating a DAX client with cluster endpoint " + daxEndpoint); AmazonDaxClientBuilder daxClientBuilder = AmazonDaxClientBuilder.standard(); daxClientBuilder.withRegion(region).withEndpointConfiguration(daxEndpoint); AmazonDynamoDB client = daxClientBuilder.build(); return new DynamoDBMapper(client); } }

È possibile eseguire query su un indice secondario globale nei seguenti modi:

  • Utilizza il metodo queryIndex della classe QueryIndexDax definita nel seguente esempio. QueryIndexDax prende come parametro l'oggetto client restituito dal metodo getDaxDocClient sulla classe DaxClient.

  • Se si sta utilizzando l'interfaccia di persistenza degli oggetti, utilizza il metodo queryIndexMapper sulla classe QueryIndexDax definito nel seguente esempio. queryIndexMapper prende come parametro l'oggetto client restituito dal metodo getDaxMapperClient definito sulla classe DaxClient.

import java.util.Iterator; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper; import java.util.List; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBQueryExpression; import com.amazonaws.services.dynamodbv2.model.AttributeValue; import java.util.HashMap; import com.amazonaws.services.dynamodbv2.document.Item; import com.amazonaws.services.dynamodbv2.document.utils.ValueMap; import com.amazonaws.services.dynamodbv2.document.spec.QuerySpec; import com.amazonaws.services.dynamodbv2.document.QueryOutcome; import com.amazonaws.services.dynamodbv2.document.ItemCollection; import com.amazonaws.services.dynamodbv2.document.Index; import com.amazonaws.services.dynamodbv2.document.Table; import com.amazonaws.services.dynamodbv2.document.DynamoDB; public class QueryIndexDax { //This is used to query Index using the low-level interface. public static void queryIndex(DynamoDB client, String tableName, String indexName) { Table table = client.getTable(tableName); System.out.println("\n***********************************************************\n"); System.out.print("Querying index " + indexName + "..."); Index index = table.getIndex(indexName); ItemCollection<QueryOutcome> items = null; QuerySpec querySpec = new QuerySpec(); if (indexName == "CreateDateIndex") { System.out.println("Issues filed on 2013-11-01"); querySpec.withKeyConditionExpression("CreateDate = :v_date and begins_with(IssueId, :v_issue)") .withValueMap(new ValueMap().withString(":v_date", "2013-11-01").withString(":v_issue", "A-")); items = index.query(querySpec); } else { System.out.println("\nNo valid index name provided"); return; } Iterator<Item> iterator = items.iterator(); System.out.println("Query: printing results..."); while (iterator.hasNext()) { System.out.println(iterator.next().toJSONPretty()); } } //This is used to query Index using the high-level mapper interface. public static void queryIndexMapper(DynamoDBMapper mapper, String tableName, String indexName) { HashMap<String, AttributeValue> eav = new HashMap<String, AttributeValue>(); eav.put(":v_date", new AttributeValue().withS("2013-11-01")); eav.put(":v_issue", new AttributeValue().withS("A-")); DynamoDBQueryExpression<CreateDate> queryExpression = new DynamoDBQueryExpression<CreateDate>() .withIndexName("CreateDateIndex").withConsistentRead(false) .withKeyConditionExpression("CreateDate = :v_date and begins_with(IssueId, :v_issue)") .withExpressionAttributeValues(eav); List<CreateDate> items = mapper.query(CreateDate.class, queryExpression); Iterator<CreateDate> iterator = items.iterator(); System.out.println("Query: printing results..."); while (iterator.hasNext()) { CreateDate iterObj = iterator.next(); System.out.println(iterObj.getCreateDate()); System.out.println(iterObj.getIssueId()); } } }

La definizione di classe qui di seguito rappresenta la tabella Issues ed è utilizzata nel metodo queryIndexMapper.

import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIndexHashKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIndexRangeKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; @DynamoDBTable(tableName = "Issues") public class CreateDate { private String createDate; @DynamoDBHashKey(attributeName = "IssueId") private String issueId; @DynamoDBIndexHashKey(globalSecondaryIndexName = "CreateDateIndex", attributeName = "CreateDate") public String getCreateDate() { return createDate; } public void setCreateDate(String createDate) { this.createDate = createDate; } @DynamoDBIndexRangeKey(globalSecondaryIndexName = "CreateDateIndex", attributeName = "IssueId") public String getIssueId() { return issueId; } public void setIssueId(String issueId) { this.issueId = issueId; } }