DynamoDB-从多个主键(分区键+排序键/哈希键+范围键)获取最新数据

时间:2018-10-01 02:28:06

标签: node.js amazon-dynamodb

我正在使用Node.js和DynamoDB JavaScript SDK进行开发。

我有一个表,其中使用“ ID”作为分区键(哈希键)和“时间”作为排序键(范围键)。而且我想从多个分区键中获取最新的N个数据。

i.e.
Table:
ID | time
01 | 2018-10-01 01:00:00
02 | 2018-10-01 02:00:00
01 | 2018-10-01 04:00:00 
03 | 2018-10-01 03:00:00

1. Get the latest 2 data from all partition key
result: 
ID | time
01 | 2018-10-01 04:00:00
03 | 2018-10-01 03:00:00

1. Get the latest 2 data from partition key 01 & 02
result: 
ID | time
01 | 2018-10-01 04:00:00
02 | 2018-10-01 02:00:00

我可以使用查询从分区键中获取最新的N个数据。

var docClient = new AWS.DynamoDB.DocumentClient();
var params = {
    TableName: 'tablename',
    ScanIndexForward: false,
    ExpressionAttributeNames: {
        '#id': 'id'
    },
    ExpressionAttributeValues: {
        ':id': '01'
    },
    KeyConditionExpression: '#id = :id',
    Limit: 2
};
docClient.query(params, function (err, data) {
    ...
});

但是我不知道如何从多个分区键中获取最新的N个数据。如果要从10个分区键中获取数据,应该查询10次吗?

2 个答案:

答案 0 :(得分:0)

是的,您需要为每个分区键进行一次查询。如果您有足够的读取容量,则可以并行启动所有查询,并且总延迟等于一个查询。

答案 1 :(得分:0)

尝试动力发电机batchget

    var docClient = new AWS.DynamoDB.DocumentClient();
    var params = {
    RequestItems: {
       'tablename': {
           Keys: [
                {'id': {N: '01'}},
                {'id': {N: '02'}},
                {'id': {N: '03'}}
              ]
          }
       }
    };
    docClient.batchGet(params,(err, data)=>{...})