Amazon dynamodb dynamo数据库查询

Amazon dynamodb dynamo数据库查询,amazon-dynamodb,Amazon Dynamodb,我的dynamo db表如下所示: HashKey(xyz) ,RangeKey(timestamp) 现在,对于每个散列键,我有一组范围键 现在我想根据hashkey集进行查询,我只想获取与之对应的最新值。我不想在内存中进行排序,然后选择最新版本 我能以任何方式做这件事吗 用例是我将执行一组bulkget和pass hashkey(比如100),所以我希望为每个hashkey获取一条记录,您(当前)不能对批处理get设置约束。看 但是,对于单个散列键,可以使用ScanIndexForward

我的dynamo db表如下所示:

HashKey(xyz) ,RangeKey(timestamp)
现在,对于每个散列键,我有一组范围键

现在我想根据hashkey集进行查询,我只想获取与之对应的最新值。我不想在内存中进行排序,然后选择最新版本

我能以任何方式做这件事吗

用例是我将执行一组bulkget和pass hashkey(比如100),所以我希望为每个hashkey获取一条记录,您(当前)不能对批处理get设置约束。看

但是,对于单个散列键,可以使用ScanIndexForward设置方向。有关信息,请参阅

示例java代码:

new QueryRequest().withTableName("table-name")
  .withScanIndexForward(false)
  .withLimit(1)
  .withHashKeyValue(new AttributeValue().withS("hash-key"));
不过,这并不是很有效,因为您需要进行100次调用。

使用ScanIndexForward(true表示升序,false表示降序),还可以使用查询表达式的setLimit值限制结果。
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;
        }
请在下面查找用于查找单个记录的查询页面的代码。 public EventLogEntitySave fetchLatestEvents(字符串id){ EventLogEntitySave实体=新建EventLogEntitySave(); 实体.setId(id); DynamoDBQueryExpression queryExpression=新的DynamoDBQueryExpression(),带有HashKeyValues(实体); queryExpression.setScanIndexForward(false); queryExpression.withLimit(1); queryExpression.setLimit(1); List result=dynamoDBMapper.queryPage(EventLogEntitySave.class,queryExpression).getResults(); System.out.println(“记录大小=“+result.size()); 结果:get(0); } @发电机表(tableName=“生产测试”) 公共类EventLogEntitySave{ @发电机钥匙 私有字符串id; 私有字符串对账过程ID; 私有字符串vin; 私有字符串源; } 公共类DynamoDBConfig{ @豆子 公共AmazonDynamoDB AmazonDynamoDB(){ 字符串accesskey=“”; 字符串secretkey=“”; // //创建dynamo客户端 BasicAWSCredentials credentials=新的BasicAWSCredentials(accesskey、secretkey); AmazonDynamoDB dynamo=新的AmazonDynamoDBClient(凭证); dynamo.setRegion(Region.getRegion(Regions.US_WEST_2)); 回程发电机; }
id是hashkey,timestamp是sort key,fetchLatestEvents根据id返回最新函数,如果scanIndexForward值标记为true,则返回最早的事件,如果值为false,则返回最近的事件,而不是在内存中进行排序