0

我的发电机数据库表如下:

HashKey(xyz) ,RangeKey(timestamp)

现在对于每个哈希键,我都有一组范围键。

现在我想根据一组哈希键进行查询,我只想获取与该值相对应的最新值。我不想在内存排序中进行然后选择最新版本。

我可以以任何方式做到这一点吗?

用例是我将做一个bulkget并传递一组hashkey(比如100),所以我想为每个hashkey获取一条记录

4

2 回答 2

0

您(当前)无法对批量获取设置约束。请参阅http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/API_BatchGetItems.html

但是,对于单个哈希键,您可以使用 ScanIndexForward 设置方向。有关信息,请参阅http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/API_Query.html

示例java代码:

new QueryRequest().withTableName("table-name")
  .withScanIndexForward(false)
  .withLimit(1)
  .withHashKeyValue(new AttributeValue().withS("hash-key"));

但是,它的效率不会很高,因为您需要进行 100 次此调用。

于 2013-03-10T11:47:49.333 回答
0
Use ScanIndexForward(true for ascending and false for descending) and can also limit the result using setLimit value of Query Expression.

Please find below the code where used QueryPage for finding the single record.

public EventLogEntitySave fetchLatestEvents(String id) {
    EventLogEntitySave entity = new EventLogEntitySave();
    entity.setId(id);

    DynamoDBQueryExpression<EventLogEntitySave> queryExpression = new DynamoDBQueryExpression<EventLogEntitySave>().withHashKeyValues(entity);
    queryExpression.setScanIndexForward(false);
    queryExpression.withLimit(1);
    queryExpression.setLimit(1);

    List<EventLogEntitySave> result = dynamoDBMapper.queryPage(EventLogEntitySave.class, queryExpression).getResults();
    System.out.println("size of records = "+result.size() );
    result.get(0);
}

@DynamoDBTable(tableName = "PROD_EA_Test")
public class EventLogEntitySave {

        @DynamoDBHashKey
        private String id;
        private String reconciliationProcessId;
        private String vin;
        private String source;
}

public class DynamoDBConfig {
    @Bean
    public AmazonDynamoDB amazonDynamoDB() {

            String accesskey = "";
            String secretkey = "";
            //
            // creating dynamo client
            BasicAWSCredentials credentials = new BasicAWSCredentials(accesskey, secretkey);
            AmazonDynamoDB dynamo = new AmazonDynamoDBClient(credentials);
            dynamo.setRegion(Region.getRegion(Regions.US_WEST_2));
            return dynamo;
        }
于 2017-05-30T05:31:20.177 回答