相对于其他NoSQL数据库,DynamoDB有哪些优缺点?

41

我们在Heroku上使用MongoDB数据库插件来支持我们的SaaS产品。现在,亚马逊推出了DynamoDB,一种云数据库服务,我想知道这是否改变了NoSQL产品的市场格局?

特别是对于云服务或SaaS供应商,与MongoDB相比,使用DynamoDB会有什么优势或劣势?在成本、性能、可扩展性、可靠性、驱动程序、社区等方面,两者之间是否存在不同的好处?


1
DynamoDB和MongoDB是两种不同的NOSQL数据库。 DynamoDB是一个键-值存储,而MongoDB是一个文档数据库,它们满足不同的需求。因此这两个数据库是不可比较的。 - Gowtham
8个回答

10

首先,它将由Amazon的专家团队全面管理,因此您可以放心它将在几乎没有终端用户(开发者)干预的情况下很好地扩展。

此外,由于它是由Amazon构建和管理的,您可以假设他们已经设计得与其基础架构非常配合,因此性能将会非常出色。除了专门为其基础架构构建之外,他们选择使用固态硬盘作为存储介质,因此从一开始,磁盘吞吐量将显著高于其他HDD支持的AWS数据存储。

我还没有看到任何驱动程序,并且我认为现在评估社区对此的反应还为时过早,但我预计Amazon将拥有针对所有最受欢迎编程语言的驱动程序,社区可能会积极响应并创造额外的驱动程序和工具。


5

比较链接中也已经过时:DynamoDB支持高达400 KB的项目(从64 KB升级)https://aws.amazon.com/blogs/aws/dynamodb-update-json-and-more/ - Trenton

5

我认为需要考虑的关键区别是,MongoDB是一种可以在任何地方安装的软件(包括在AWS或其他云服务中或内部),而DynamoDB是一种SaaS,仅作为Amazon(AWS)提供的托管服务。如果您想保留在内部托管应用程序的选项,则DynamoDB不是一个选择。如果在AWS之外托管不是一个考虑因素,那么除非有非常特定的功能更加重要,否则DynamoDB应该是您的默认选择。


5

通过Heroku的插件使用MongoDB可以有效地将MongoDB变成一个SaaS产品。

实际上,我们需要比较所选提供商所提供的服务与亚马逊所提供的服务,而不是将一种持久性解决方案与另一种进行比较。

这很难做到。每个提供商的服务水平和价格不同,有人可以考虑在本地硬件上运行它来作为开发目的的可行选择。


3
我认为DynamoDB和其他NoSQL提供的主要区别之一是预留吞吐量 - 你在表上支付特定的吞吐量水平,只要你保持好数据分区,你始终可以期望满足这个吞吐量。所以随着你的应用程序负载增加,你可以进行扩展,使你的性能基本保持不变。

3

说实话,当我听说有新的DynamoDB并参加了昨天的网络研讨会时,我非常兴奋。然而,现在很难做出决定,因为他们所说的一切仍然非常模糊;我不知道将通过他们的服务使用哪些功能。

唯一我知道的是,自动处理扩展非常棒,但仍有许多未知因素,直到我们可以开始使用它并获得所有事实之前,真正进行全面分析还是很困难的。

到目前为止,在我正在进行的项目中,我仍然认为Mongo更适合我(个人)。像大多数数据库决策一样,这真的要根据项目来决定什么最适合你的需求。

我迫切期待产品的更多信息,但现在它还处于测试阶段,我不会跳船采用最新和最好的只成为测试者 :)


我知道这篇帖子是4年前的,但你对DynamoDB的看法有更新吗? - shle2821
早上好@shle2821,不幸的是我还没有太多机会使用它;但是我继续听到关于Dynamo的好消息。 - Petrogad

1

Amazon DynamoDB似乎是一个相当不错的NoSQL解决方案。它非常快速,而且使用起来也相当简单。除了拥有AWS账户外,真的没有任何设置或维护要求。就目前而言,与MongoDB/CouchDB/Cassandra相比,其功能集和API相对较小,但我认为这将随着开发者社区的反馈而逐渐增长。现在,所有官方AWS SDK都包含DynamoDB客户端。


0

优点

  1. 闪电般的速度(内部使用SSD)
  2. 非常可靠(写入失败的几率更低)
  3. 无缝扩展(无需手动分片)
  4. 作为Web服务工作(无需服务器、配置或安装)
  5. 易于与其他AWS功能集成(可以将整个表存储到S3中或使用EMR等)
  6. 复制由内部管理,因此意外数据丢失的几率极小。

缺点

  1. 查询非常有限。
  2. 扫描很痛苦(我记得有一次通过Java扫描运行了6个小时)
  3. 预定义吞吐量,这意味着超出设置吞吐量的突然增加将被限制。
  4. 吞吐量随着表在内部分片而分区。(这意味着如果您的吞吐量为1000,并且它被分成两个部分,如果您只读取最新数据(从一个部分),则您的读取吞吐量仅为500)
  5. 没有连接,只允许有限的索引(基本上只有2个)。
  6. 没有视图、触发器、脚本或存储过程。

在可扩展应用程序中,它是会话存储的一个很好的替代品。另一个很好的用途是在大型系统中进行日志记录/审计。但对于频繁增强或更改的功能丰富应用程序来说,不是首选。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接