我正在使用适用于 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 秒后响应,为什么?
提前谢谢您,
最佳答案
您几乎同时向 DynamoDB 发送 5000 个调用。首先,运行测试的计算机上可能存在一些 CPU 和网络瓶颈,使其无法达到您想要的性能。其次,如果这确实是您打算测试的内容,那么您需要将 DynamoDB 的写入容量提高到更高。
如果您尝试一次对 DynamoDB 执行一个调用,则需要等待回调完成,然后再执行下一个调用。
关于node.js - AWS-SDK DynamoDB NodeJS 性能不佳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34636060/