DynamoDB - Получить последние данные из нескольких первичных ключей (ключ раздела + ключ сортировки / ключ хеша + ключ диапазона) - PullRequest
0 голосов
/ 01 октября 2018

Я использую 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 из ключа раздела с помощью Query.

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 голосов
/ 03 октября 2018

попробуйте пакетную запись DynamodB

    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)=>{...})
0 голосов
/ 03 октября 2018

Да, вам нужен один запрос для каждого ключа раздела.Если у вас достаточно емкости для чтения, вы можете запускать все запросы параллельно и иметь общую задержку, эквивалентную одному запросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...