【问题标题】:Dynamodb poor read performanceDynamodb 读取性能不佳
【发布时间】:2019-01-24 11:57:21
【问题描述】:

这些天,我测试了 Dynamodb 的性能,但我对性能感到失望。

我只在没有任何过滤条件的分区键上使用了query 命令。这意味着它只是简单地读取索引并返回。

dynamodb.query(
    TableName='test-table',
    ReturnConsumedCapacity='TOTAL',
    KeyConditionExpression='tid = :tid',
    Limit=5000,
    ExpressionAttributeValues={
        ':tid': {'N': '9999999'},
    }
)

---------- Part of Response ----------
{
    .
    .
    .
    "Count": 5000,
    "ScannedCount": 5000,
    "LastEvaluatedKey": {
        "tid": {
            "N": "9999999"
        },
        "uid": {
            "N": "985377"
        }
    },
    "ConsumedCapacity": {
        "TableName": "sam-push-test",
        "CapacityUnits": 110.5
    }
}

大约需要 0.5 秒。它在与 Dynamodb 位于同一区域的 AWS Lambda(1024 内存)中进行了测试。

我很好奇表现不佳是一种正常情况,或者我应该错过了什么。

显然,AWS 是在说 Dynamodb 提供个位数毫秒的性能。

Amazon DynamoDB 是一种键值对和文档数据库,可在任何规模下提供个位数毫秒的性能。

此外,Dynamodb 控制台中的 query-latency 指标在我的测试中显示为 100-150 毫秒。

它是如何测量的?

【问题讨论】:

    标签: python amazon-web-services amazon-dynamodb python-3.6 boto3


    【解决方案1】:

    在读取或写入单个项目时,您应该期望单位数毫秒的性能。但是当查询一个包含 5000 个项目的页面时(就像你的情况一样),看到 ~100 毫秒是正常的。

    当然,您还应该确保客户端距离 DynamoDB 端点不太远。环游世界很容易增加 100 毫秒以上。

    【讨论】:

    • 你的意思是我的检测结果不正常吧?但是,我在与 Dynamodb 位于同一区域的 AWS Lambda(1024M 内存)中运行测试。即使我将 Lambda 内存设置为 3008M(最大),响应时间的减少也有点小(0.5 -> 0.3 秒)。有什么清单可以说明为什么它表现不佳?
    • 不,您的测试结果显示正常。尝试单个 GetItem 请求,而不是查询。这应该会在 10 毫秒内从同一区域的 Lambda 中返回。您正在获取 5000 件商品。获取这么多项目大约需要 100 毫秒是正常的。
    • 感谢您的回答!我想再澄清一下。因此,0.5 秒的响应时间完全是往返时间,即使 Dynamodb 查询延迟仅为 100-150 毫秒的页面,获取页面(可能是 1Mbyte)也是正常的?
    • CloudWatch 指标应该告诉您 DynamoDB 处理请求所花费的时间。单个 GetItem 和 Query 有一个单独的图表。该延迟与您测量的延迟之间的差异可能来自客户端或往返。如果您在同一区域的 Lambda 中运行它,往返延迟应该只有 1-2 毫秒左右。
    • 作为我的测试结果和您的回答,响应时间不佳(0.5 秒)可能是因为在客户端加载数据的开销。
    猜你喜欢
    • 2016-04-10
    • 2022-07-15
    • 2022-01-20
    • 2012-05-12
    • 2019-07-01
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多