【问题标题】:Dynamo db write operationsDynamo 数据库写入操作
【发布时间】:2015-07-08 15:21:11
【问题描述】:

Dynamo db 每批只允许 25 个请求。由于我必须每秒处理 1000 条记录,我们有什么办法可以在 Java 中增加它?有比分批处理更好的解决方案吗?

【问题讨论】:

    标签: java amazon-web-services amazon-dynamodb throughput


    【解决方案1】:

    每个 BatchWriteItem 的 25 个是硬 dynamodb 限制,如此处所述:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html

    没有什么可以阻止您并行执行多个 BatchWrites。决定你能写多少的东西是桌子上的 write-provisioned-throughput。

    【讨论】:

      【解决方案2】:

      在 DynamoDB 中引入 BatchWrites 是为了减少对不提供并行线程执行工作机会的语言(例如 PHP)执行多个写入操作所需的往返次数。

      虽然由于使用批处理 API 减少了往返次数,您仍然可以获得更好的性能,但仍然存在个别写入失败的可能性,您的代码将需要寻找这些。使用 Java 执行大规模并行写入的一种稳健方法是使用 ExecutorService 类。这提供了一种简单的机制来使用多个线程来执行插入。但是,正如批次中的单个项目可能会失败一样,您需要跟踪 Future 对象以确保成功执行写入。

      提高吞吐量的另一种方法是在 EC2 上运行您的代码。如果您从笔记本电脑或 AWS 以外的数据中心调用 DynamoDB,则往返时间会更长,请求会稍微慢一些。

      底线是使用标准的 Java 多线程技术来获得您想要的性能。但是,在某个时间点之后,您可能需要扇出并使用额外的硬件来驱动更高的写入 OPS。

      【讨论】:

        【解决方案3】:

        只要您有大量实时数据流需要最终存储在 AWS 中,Kinesis Streams 可能就是您的最佳选择。特别是使用AWS Kinesis Firehose,您可以将数据大规模传输到 S3,而无需管理开销。然后,您可以使用 DataPipeline 将其移动到 Dynamo。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多