Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Interrogation d’index secondaires globaux avec le kit SDK pour Java 1.x
Vous pouvez utiliser Amazon DynamoDB Accelerator (DAX) pour interroger des index secondaires globaux à l’aide d’interfaces de programmation DynamoDB.
L’exemple suivant montre comment utiliser DAX pour interroger l’index secondaire global CreateDateIndex créé dans Exemple : index secondaires globaux utilisant l’API de document AWS SDK pour Java.
La classe DAXClient instancie les objets clients requis pour interagir avec les interfaces de programmation DynamoDB.
import com.amazon.dax.client.dynamodbv2.AmazonDaxClientBuilder; import software.amazon.dynamodb.datamodeling.DynamoDBMapper; import software.amazon.dynamodb.document.DynamoDB; import com.amazonaws.util.EC2MetadataUtils; import software.amazon.dynamodb.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); } }
Vous pouvez interroger un index secondaire global selon les méthodes suivantes :
-
Utilisez la méthode
queryIndexsur la classeQueryIndexDaxdéfinie dans l’exemple suivant.QueryIndexDaxutilise en tant que paramètre l’objet client renvoyé par la méthodegetDaxDocClientsur la classeDaxClient. -
Si vous utilisez l’interface de persistance des objets, utilisez la méthode
queryIndexMappersur la classeQueryIndexDaxdéfinie dans l’exemple suivant.queryIndexMapperutilise en tant que paramètre l’objet client renvoyé par la méthodegetDaxMapperClientdéfinie sur la classeDaxClient.
import java.util.Iterator; import software.amazon.dynamodb.datamodeling.DynamoDBMapper; import java.util.List; import software.amazon.dynamodb.datamodeling.DynamoDBQueryExpression; import software.amazon.dynamodb.model.AttributeValue; import java.util.HashMap; import software.amazon.dynamodb.document.Item; import software.amazon.dynamodb.document.utils.ValueMap; import software.amazon.dynamodb.document.spec.QuerySpec; import software.amazon.dynamodb.document.QueryOutcome; import software.amazon.dynamodb.document.ItemCollection; import software.amazon.dynamodb.document.Index; import software.amazon.dynamodb.document.Table; import software.amazon.dynamodb.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 définition de classe ci-dessous représente la table Issues et est utilisée dans la méthode queryIndexMapper.
import software.amazon.dynamodb.datamodeling.DynamoDBTable; import software.amazon.dynamodb.datamodeling.DynamoDBIndexHashKey; import software.amazon.dynamodb.datamodeling.DynamoDBIndexRangeKey; import software.amazon.dynamodb.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; } }