2017-02-01 7 views
1

Так что моя проблема в том, что DynamoDB занимает довольно много времени, чтобы вернуть один объект. Я использую node.js и AWS docclient. Странно то, что требуется от 100 мс до 200 мс для «выбора» отдельного элемента из БД. Есть ли способ сделать это быстрее?DynamoDB slow response

Примеру код:

var AWS = require("aws-sdk"); 
var docClient = new AWS.DynamoDB.DocumentClient(); 
console.time("user get"); 
var params = { 
     TableName : 'User', 
     Key: { 
     "id": "2f34rf23-4523452-345234" 
     } 
    }; 

    docClient.get(params, function(err, data) { 
     if (err) { 
      callback(err); 
     } 
     else {    
      console.timeEnd("user get"); 
     } 
    }); 

И средний для этого простого куска кода в лямбда-130ms. Любая идея, что я могу сделать, чтобы сделать это быстрее? В таблице пользователя есть только первичный ключ раздела «id» и глобальный вторичный индекс с адресом электронной почты первичного ключа. Когда я пытаюсь это сделать с моей консоли, требуется еще больше времени.

Любая помощь будет очень признательна!

+0

Вы используете код из того же региона, что и ваша таблица DDB? –

+0

Да, это все в одном регионе. – gabrjan

ответ

1

У вас есть warmed up your Lambda function? Если вы только запускаете его ad-hoc и не запускаете непрерывную нагрузку, function might not be available yet на контейнере, запускающем его, так что там может быть проведено дополнительное время. Одним из способов поддержки или опровержения этой теории было бы взглянуть на показатели задержки для API GetItem. Наконец, вы можете попробовать использовать AWS X-Ray, чтобы найти другие пятна задержки в вашем стеке.

DynamoDB SDK также может повторять попытку, добавляя к вашей воспринимаемой задержке функцию Лямбда. Учитывая, что ваши предметы составляют около 10 КБ, возможно, вы получаете дросселирование. У вас достаточно ресурсов для чтения? Вы можете проверить как латентность чтения, так и прочитать показатели дросселирования в консоли DynamoDB для своей таблицы.

+0

Ну, даже если я запускаю каждую функцию, как 10 раз подряд, результат будет таким же. – gabrjan

+0

Насколько велики ваши товары? Обычно вы будете наблюдать за задержкой в ​​10-15 мс для чтения небольших предметов (менее 1 килобайта) и еще 10-15 мс для времени выполнения Jambda JS. –

+0

Хмм, может быть, потому что мои вещи довольно большие? Каждый элемент имеет приблизительно 10 тыс. Символов, а размер составляет 10 КБ. Btw. даже если я добавлю ProjectionExpression: «id», это не ускорит все. – gabrjan