我正在使用适用于NodeJS的AWS-SDK测试dynamoDB API。 但我有一些奇怪的行为,dynamoDB似乎反应较慢,我不明白为什么。
在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次调用,“for”语句在3秒后结束,但第一个dynamoDB在30秒后响应,为什么?
提前谢谢你,
答案 0 :(得分:0)
您几乎同时向DynamoDB发送5000个调用。首先,运行测试的计算机上可能存在一些CPU和网络瓶颈,导致无法执行此操作。其次,如果这确实是您打算测试的,那么您需要将DynamoDB的写入容量提高到更高的值。
如果您尝试一次只执行一次对DynamoDB的调用,则需要等待回调完成后再执行下一次调用。
答案 1 :(得分:0)
谢谢你的回答。
目前我有一个nodejs web服务器(带有restify),当我对它进行负载测试(超过1000 req / s)时,dynamodb似乎响应缓慢,超过60秒,当然还有一些请求超时。
使用我的代码,我想了解为什么dynamodb似乎很慢。 我正在寻找代码中的瓶颈。