DynamoDB local需要100多毫秒才能对我的表执行单个put操作。文档说本地dbs会忽略吞吐量,并且仅受硬盘/计算机速度的限制。
与mongodb相比,我的写入吞吐量比它应该慢100倍。我有什么办法可以加快速度吗?
我会尝试批量投注,但问题仍然存在。在这一点上,我需要花费数年时间来输入我的(相当大的)测试数据。
我使用Clojure和Faraday作为我的客户端api,但已经确认这不是瓶颈。
还有其他人在DynamoDB本地出现可怕的慢速写入速度吗?
编辑:
我已经实现了25次/批次,这使总进度减慢了大约25倍:)。因此,即使使用批次,我也能获得每件约120毫秒的写入速度。
使用Mongo,即使使用保守的WriteConcern / ACKNOWLEDGED标志,每个项目也会产生大约250微秒(约快500倍),而且甚至不需要发送批次。因此,问题不在于我的硬盘或操作系统。
非常感谢任何见解。
SK
答案 0 :(得分:10)
自从您提出问题以来已经有一段时间了,但我仍想提供一些背景信息。
MongoDB速度非常快,因为它会在将更新写入磁盘之前将更新缓冲在内存中。您可以在MongoDB官方常见问题解答here
中阅读更多相关信息 另一方面,DynamoDBLocal非常慢,因为它在后台使用SQLite数据库(您可以通过使用SQLite浏览器打开DynamoDBLocal目录中的* .db文件来检查)和 与其他数据库相比,SQLite的写入速度非常慢。更多信息here。DynamoDBLocal只是本地开发的基本工具,它围绕简单的SQLite数据库包装DynamoDB API的子集。当然,真正的DynamoDB不依赖于SQLite,而且速度更快。
答案 1 :(得分:-1)
这是一个古老的问题,但仍然很有意义-根据Stackoverflow的说法,这些年来被浏览了2000多次。正如FLXN在其回答中已经解释的那样,DynamoDB Local旨在成为开发应用程序的工具-并不是要真正替代DynamoDB进行安装。它既不够高效,也没有足够的可用性或持久性,无法充当真正的数据库。
但是从最近开始,如果您想要一个具有DynamoDB API兼容性的真实(高可用性和高效)可安装数据库,则可以使用替代方法:ScyllaDB recently announced开源Scylla数据库现在具有DynamoDB API支持。该支持尚不完善,仍然缺少一些DynamoDB功能,但是兼容性正在迅速提高,您可以查看this document了解Scylla与DynamoDB API的兼容性的当前状态。
完全公开:我是ScyllaDB的一名雇员,也是Alternator的开发人员之一-Scylla对DynamoDB API的支持。