DynamoDb scan Возвращает все данные локально, но не в прямом эфире. - PullRequest
2 голосов
/ 18 апреля 2019

Я использовал рекурсивные вызовы, чтобы получить данные более чем 1 МБ из динамической базы данных, используя эту

params.ConsistentRead = true;
  let projectCollection = [];
  dynamoDb.scan(params, onQuery);
  function onQuery(err, data) {
      const methodName = 'onQuery';
      if (err) {
          callback(err);
      } else {
          for (let i = 0; i < data.Items.length; i++) {
              projectCollection.push(data.Items[i]);
          }
          if (typeof data.LastEvaluatedKey !== 'undefined') {
              params.ExclusiveStartKey = data.LastEvaluatedKey;
              dynamoDb.scan(params, onQuery);

          } else {        
              callback(err, projectCollection); //recursive call
          }
      }
  }
};

но я получаю данные на своем локальном хосте, но как только я развернул их на AWS, где вызовы проходят через конвейерный API GATEWAY, затем lambda, затем dynamicodb, моя функция возвращает не все данные, а небольшой фрагмент.

Это проблема с кешем?

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

Вместо этого я использовал QUERY, и он предоставляет данные быстрее в соответствии с потребностями.

let items = [];
  let queryExecute = function(callback) {
      dynamoDb.query(params,function(err,result) {
          if(err) {
              callback(err);
              } else {
              items = items.concat(result.Items);
              if(result.LastEvaluatedKey) {
                  params.ExclusiveStartKey = result.LastEvaluatedKey;
                  queryExecute(callback);
                  } else {         
                      callback(err,items);
                  }
              }
          });
      };

0 голосов
/ 19 апреля 2019

Возможно, но я думаю, что более вероятно, что вы не просматриваете результаты сканирования должным образом. Я думаю, что наиболее вероятным объяснением является то, что вы читаете только первую страницу.

Я не нодзейский человек, но заметил, что вы используете строгий операнд:

typeof data.LastEvaluatedKey !== 'undefined'

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

typeof data.LastEvaluatedKey != 'undefined'
...