峰值读数容量单位发电机数据库表

时间:2017-01-27 15:08:57

标签: amazon-dynamodb

我需要找出我的一个发电机数据库表中最近20秒消耗的峰值读取容量单位。我需要在java中以编程方式找到它,并根据用法设置自动缩放操作。

请您分享一个示例java程序,以查找特定发电机数据库表在过去20秒内消耗的峰值读取容量单位吗?

注意:数据库上的dynamo DB请求有异常峰值,因此需要动态自动缩放。

我试过这个:

result = DYNAMODB_CLIENT.describeTable(recomtableName);
                    readCapacityUnits = result.getTable()
                            .getProvisionedThroughput().getReadCapacityUnits();

但是这提供了预配容量,但我需要在最后20秒内消耗的容量。

2 个答案:

答案 0 :(得分:0)

您可以使用CloudWatch API getMetricStatistics方法获取所需容量指标的读数。您可以找到需要设置的各种参数的提示here

答案 1 :(得分:0)

为此,您必须使用Cloudwatch。

   GetMetricStatisticsRequest metricStatisticsRequest = new GetMetricStatisticsRequest()
    metricStatisticsRequest.setStartTime(startDate)
    metricStatisticsRequest.setEndTime(endDate)
    metricStatisticsRequest.setNamespace("AWS/DynamoDB")
    metricStatisticsRequest.setMetricName('ConsumedWriteCapacityUnits',)
    metricStatisticsRequest.setPeriod(60)
    metricStatisticsRequest.setStatistics([
        'SampleCount',
        'Average',
        'Sum',
        'Minimum',
        'Maximum'
])
    List<Dimension> dimensions = []
    Dimension dimension = new Dimension()
    dimension.setName('TableName')
    dimension.setValue(dynamoTableHelperService.campaignPkToTableName(campaignPk))
    dimensions << dimension
    metricStatisticsRequest.setDimensions(dimensions)
    client.getMetricStatistics(metricStatisticsRequest)

但是我敢打赌,您的结果会超过5分钟。

实际上,现成的自动升级是使用Cloudwatch。这确实有一个缺点,并且对于某些应用是不可接受的。   当尖峰负荷到达您的表时,它没有足够的容量来响应。保留一些重载是不够的,表开始节流。如果在等待表响应时将记录保留在内存中,它可能只会炸毁内存。另一方面,当尖峰消失时,Cloudwatch通常会在一段时间内做出反应。根据我们的测试,至少需要5分钟。然后逐渐增加容量,在需要时直接达到最大容量 enter image description here


长话短说。我们使用自己的速度计创建了定制解决方案。它所做的是计算需要计数的内容,并相应地更改表的容量。仍然有一个延迟,因为

  1. 应用程序本身需要花费一些时间来了解要做的事
  2. Dynamo表花费约30秒的时间来更新新的容量详细信息。

    在顶部,我们还有一个节流检测器。因此,如果写入/读取请求受到限制,我们将立即相应地提高容量。有时容量级别看起来不错,但由于HOT关键问题而有所节流。