node.js - AWS-SDK DynamoDB NodeJS 性能不佳?

标签 node.js amazon-web-services amazon-dynamodb aws-sdk

我正在使用适用于 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/

相关文章:

node.js - Docker Container npm全局影响主机还是仅容器?

node.js - 使用 Node.js 连接到 Heroku 上的 postgres

amazon-web-services - 尝试允许 lambda 使用基于 S3 资源的策略访问 S3,为什么它不起作用?

python - 如何使用 Python boto3 从 AWS DynamoDB 表中获取特定属性的所有项目?

node.js - 将字符串添加到 dynamodb 表中的列表

javascript - 打印函数调用者行号的更好方法

amazon-web-services - AWS S3 操作不适用于声明中的任何资源

amazon-web-services - AWS Glue JSON 限制

javascript - DynamoDb 放入 node.js lambda 后合并异步 http 请求函数时出现问题

r - 使用 R/Rserve 运行 Node.js 的良好托管解决方案是什么?