DynamoDB:如何在一个月内分配工作量?

bar*_*olo 13 database mapreduce amazon-dynamodb

TL; DR

我有大约200万写入一个表月和0读取.每个月的第一天,我需要阅读上个月写的所有行并生成CSV +统计信息.

如何在此方案中使用DynamoDB?如何选择READ吞吐量?

详细描述

我有一个记录客户端请求的应用程序.它有大约200个客户.客户需要在每个月的第一天收到一份CSV,其中包含他们所做的所有请求.他们还需要收费,为此我们需要根据他们提出的请求计算一些统计数据,按请求类型进行分组.

因此,在本月底,客户收到如下报告:

完整的请求列表

结算摘要

我已经找到了两个解决方案,但我仍然不相信它们中的任何一个.

第一个解决方案:好的,每月的最后一天我增加READ吞吐量,然后运行map reduce工作.作业完成后,我将容量减少回原始值.

缺点:未完全自动化,在作业启动时无法使用DynamoDB容量的风险.

第二个解决方案:我可以在日常或每小时的例行程序中将CSVs +统计数据的生成分解为小型工作.我可以在S3上存储部分CSV,并且在每个月的第一天我可以加入这些文件并生成一个新文件.统计数据将更容易生成,只是从每日/每小时统计数据中得出一些计算结果.

缺点:我觉得我正在把一些简单的东西变成复杂的东西.

你有更好的解决方案吗?如果没有,你会选择什么解决方案?为什么?

Boh*_*ian 5

之前我曾经在一个类似的地方,我用过,现在建议您处理原始数据:

  • 你可以合理地经常(从每天开始)
  • 格式尽可能接近所需的报告输出
  • 尽可能多地进行计算/ CPU密集型工作

在报告时尽可能少做.

这种方法完全可扩展 - 增量频率可以是:

  • 根据需要缩小到一个小窗口
  • 如果需要并行化

由于报告生成时间应该非常短,因此也可以根据需要重新运行过去几个月的报告.

在我的示例中,我每小时将非规范化,预处理(财务计算)数据发送到数据仓库,然后报告只涉及非常基本(和快速)的SQL查询.

这样做的另一个好处是可以将生产数据库服务器上的负载分散到许多小的位置,而不是每周在发票时间(每周生产30000个发票)使其瘫痪.