【问题标题】:DynamoDB - Get latest data from multiple primary key (partition key+sort key / hash key+range key)DynamoDB - 从多个主键(分区键+排序键/哈希键+范围键)获取最新数据
【发布时间】:2018-10-01 02:28:05
【问题描述】:

我正在使用 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

我可以通过使用 Query 从一个分区键中获取最新的 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 次吗?

【问题讨论】:

    标签: node.js amazon-dynamodb


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      试试 dynamodb 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)=>{...})
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-21
        • 2016-12-09
        相关资源
        最近更新 更多