2016-01-06 66 views
0

我正在用NodeJS的AWS-SDK測試dynamoDB API。 但我有一些奇怪的行爲,dynamoDB似乎響應較慢,我不明白爲什麼。AWS-SDK DynamoDB NodeJS性能不佳?

從AWS控制檯,我設置爲「100」讀取容量單位爲「MyTable的」

我做了一些基準測試:

爲10個呼叫服務似乎在不到1秒的響應; 100調用(1,5秒),1000次調用(4,5秒),5000次調用(30秒)

查看下列我的代碼:

var http = require('http'); 
var https = require('https'); 
var AWS = require("aws-sdk"); 

var start = new Date(); 

http.globalAgent.maxSockets = 100000; 
https.globalAgent.maxSockets = 100000; 

AWS.config.update({ 
    accessKeyId: 'MyAccessKey', 
    secretAccessKey: 'MySecretKey', 
    region: 'MyRegion' 
}); 

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

var startedDate = new Date() 
console.log('Start'); 
for (var i = 0; i < 5000; i++) { 
    getVolume("604275e8-17de-4582-bbc2-1b5eaf3b0a4c"); 
} 
console.log('Over ' + (new Date() - startedDate) + ' ms'); 

function getVolume(key) { 
    var params = { 
     TableName: "MyTable", 
     KeyConditionExpression: "#id = :key", 
     ExpressionAttributeNames: { 
      "#id": "id" 
     }, 
     ExpressionAttributeValues: { 
      ":key": key 
     } 
    }; 
    var requestStarted = new Date() 
    dynamodbDoc.query(params, function (err, data) { 
     if (err) { 
      console.error("Unable to query. Error:", JSON.stringify(err, null, 2)); 
     } else { 
      console.log("DynamoDB : " + (new Date() - requestStarted)); 
     } 
    }); 
} 

隨着5000個的呼叫,「用於「聲明在3秒後結束,但第一個dynamoDB在30秒後迴應,爲什麼?

謝謝你在前進,

回答

0

你幾乎同時發送5000個呼叫DynamoDB。首先,運行測試的計算機上可能存在一些CPU和網絡瓶頸,使其性能不盡人意。其次,如果這確實是您打算測試的內容,那麼您需要將DynamoDB的寫入容量提高到更高。

如果您嘗試一次執行一個到DynamoDB的調用,則需要等待回調完成後再執行下一個調用。

+0

也取決於您對測試的期望,也許它將跨越不同按鍵傳播dynamodb調用更相關,只是爲了不將所有點擊集中在同一個分區上 – Tom

0

謝謝你的回答。

目前我有一個nodejs web服務器(有restify),當我對它進行負載測試時(超過1000請求/秒),dynamodb似乎響應緩慢,超過60秒,當然還有一些請求有超時。

隨着我的代碼,我想了解爲什麼dynamodb似乎很慢。 我正在尋找我的代碼中的瓶頸。