0

У меня проблема с сохранением нескольких элементов в DynamoDB. Мой код структурирован следующим образом: выход журналаОбещанное DynamoDB не сохраняет все элементы, циклически перемещаемые в Promise.map

var Promise = require("bluebird"); 
var AWS = require('aws-sdk'); 

//config promise environment for AWS SDK 
AWS.config.setPromisesDependency(require("bluebird")); 
AWS.config.update({ 
    accessKeyId: "*", 
    secretAccessKey: "*", 
    region: 'eu-west-1' 
}); 

var dynamodb = new AWS.DynamoDB.DocumentClient(); 

var arrayReading = []; //array of element we are going to save 
for (var i = 0; i < 10; i++) { //filling the array 
    var reading = { 
     "device": null, 
     "timestamp": new Date().toISOString(), 
     "installation": "1", 
     "values": [] 
    }; 
    console.log("creation: DEV" + i); 
    reading.device = "DEV" + i; 
    arrayReading.push(reading); 
} 
console.log(arrayReading.length); 
Promise.map(arrayReading, function (reading) { 
    console.log("saving device", reading.device); 
    var params = { 
     "TableName": "readings-test", 
     "Item": reading 
    }; 

    return dynamodb.put(params).promise() //saving 
     .catch(function (err, data) { 
      console.log("Error:",err); 
     }); 
}).then(function() { 
    console.log("done") 
}); 

консоли я получаю так:

creation: DEV0 
[...] 
creation: DEV9 
10 
saving device DEV0 
[...] 
saving device DEV9 
done 

Так я предполагаю, что все элементы будут сохранены. Вместо этого, когда я иду, чтобы проверить свою таблицу DynamoDB, я вижу, что только случайное подмножество моих элементов (от 3 до 6) было сохранено.

Что я делаю неправильно? Я попытался повысить емкость записи и чтения моей таблицы, но это не решило проблему.

ответ

0

Проблема была в конфигурации основного/сортировочного ключа.

Моим первичным ключом была установка и ключ сортировки метки времени. Это привело к тому, что кластер быстрых асинхронных писем имеет одну и ту же метку времени, перезаписывая предыдущую запись.