Dynamo db每批只允许25个请求。我们有什么方法可以在Java中增加这个,因为我必须每秒处理1000个记录?任何解决方案比分批处理它们更好吗?
答案 0 :(得分:2)
每个BatchWriteItem 25是一个硬的dynamodb限制,如下所示:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html
没有什么能阻止您并行执行多个BatchWrites。可以写入多少内容的是桌面上的写入配置吞吐量。
答案 1 :(得分:0)
DynamoDB中的BatchWrites是为了减少为不能为并行线程执行工作的语言(如PHP)执行多次写操作所需的往返次数而引入的。
虽然通过使用批处理API减少了往返次数,您仍然可以获得更好的性能,但仍有可能单个写入失败并且您的代码需要查找这些内容。使用Java执行大规模并行写入的强大方法是使用ExecutorService类。这提供了一种使用多个线程来执行插入的简单机制。但是,正如批处理中的单个项可能会失败一样,您将需要跟踪Future对象以确保成功执行写入。
提高吞吐量的另一种方法是在EC2上运行代码。如果您从笔记本电脑或AWS外部的数据中心呼叫DynamoDB,往返时间将会更长,请求会稍微慢一点。
最重要的是使用标准的Java多线程技术来获得所需的性能。但是,在某一点上,您可能需要扇出并使用额外的硬件来驱动更高的写OPS。
答案 2 :(得分:0)
每当您有大量需要在AWS中结束的实时数据时,Kinesis Streams可能就是您的选择。特别是使用AWS Kinesis Firehose,您可以大规模地将数据传输到S3,而无需管理开销。然后,您可以使用DataPipeline将其移至Dynamo。