2012-12-20 123 views
55

我一直在使用MySQL的公平,而现在,我很熟悉它的结构& SQL查询等AWS MySQL的RDS VS AWS DynamoDB

目前建设AWS一个新的系统,我一直在寻找在DynamoDB。目前我只知道一点。

一个比另一个更好吗?

DynamoDB的优点是什么?

什么是从MySQL查询等过渡到这个平面样式数据库?

回答

32

您可以阅读AWS的解释here

总之,如果你主要有查询查询(而不是加入查询),DynamoDB(和其他NoSQL数据库)更好。如果您需要处理大量数据,那么在使用MySQL(以及其他RDBMS)时将会受到限制。

您不能重复使用您的MySQL查询或您的数据模式,但如果您花费精力学习NoSQL,则会在工具箱中添加一个重要工具。 DynamoDB提供最简单的解决方案的情况很多。

138

真的DynamoDB和MySQL是苹果和橘子。 DynamoDB是NoSQL存储层,而MySQL用于关系存储。您应根据应用程序的实际需要选择要使用的内容。事实上,一些应用程序可能会同时使用这两种应用程序。

例如,如果您存储的数据不能很好地适用于可以针对单个键或键/范围查找的关系模式(树结构,无模式JSON表示等)那么DynamoDB(或其他一些NoSQL商店)可能是您最好的选择。

如果您的数据有一个定义良好的模式,可以很好地适应关系结构,并且您需要灵活地以多种不同方式查询数据(当然需要添加索引),那么RDS可能会成为更好的解决方案。

使用DynamoDB作为NoSQL存储的主要好处是,无论您需要什么级别,都可以保证读/写吞吐量,而无需担心管理集群数据存储。因此,如果您的应用程序每秒需要1000次读取/写入操作,那么您可以将DynamoDB表配置为该吞吐量级别,而不必担心底层基础架构。

RDS具有很多与不必担心基础架构本身相同的好处,但是如果您最终需要执行大量写入操作以使最大实例大小不再保持不变,那么您没有选项的情况下(您可以水平缩放以使用只读副本进行读取)。

更新说明:DynamoDb现在支持全局二级索引,因此您现在可以对散列或散列和范围键组合以外的数据字段执行优化查找。

+6

如果我能把你的答案提高100,我会的。 – Salil

+0

你几乎有你的愿望100 upvotes :) – Luke

+0

你明白了! 100. –

6

使用DynamoDB时,您还应该知道DynamoDB中的项目/记录限制为400KB(请参阅DynamoDB Limits)。对于许多用例来说,这是行不通的。所以DynamoDB对于少数几件事情会有好处,但不是全部。其他许多NoSQL数据库也一样。

89

我们刚刚将所有DynamoDB表迁移到了RDS MySQL。

虽然在特定任务中使用DynamoDB可能有意义,但在DynamoDB之上构建新系统实在是一个坏主意。最好的计划等等,你总是需要从你的数据库中获得额外的灵活性。

这是我们的原因,我们从DynamoDB感动:

  1. 索引 - 更改或添加键上即时而无需创建一个新的表是不可能的。
  2. 查询 - 查询数据非常有限。特别是如果你想查询非索引数据。连接当然是不可能的,所以你必须在代码/缓存层上管理复杂的数据关系。
  3. 备份 - 与RDS的华丽备份相比,这种繁琐的备份过程令人失望。
  4. GUI - 用户体验差,搜索有限,没有乐趣。
  5. 速度 - 与RDS相比,响应时间有问题。您会发现自己构建了精心设计的缓存机制,以便在您为RDS的内部缓存解决的地方进行补偿。
  6. 数据完整性 - 虽然流体数据结构的概念听起来不错,但您的一些数据更适合“坚如磐石”。当一个小错误试图破坏你的数据库时,强打字是一件幸事。有了DynamoDB,任何事情都是可能的,事实上任何可能出错的事情都会发生。

我们现在使用DynamoDB作为某些系统的备份,我相信我们将来会针对特定的,明确定义的任务使用它。这不是一个糟糕的数据库,它仅仅是为数据库服务100%的核心系统。

就优势而言,我会说可扩展性和耐久性。它的尺寸令人难以置信和透明,并且(总是)总是起来。这些都是非常棒的功能,但它们不会以任何方式弥补不利因素。

+0

它也是一个非常不同的模型,所以你真的需要了解如何使用它,我认为它们并不是很好。 –

+4

非常具体的优点/缺点。很好的回答 – stevendesu

+5

这其中的一些已经过时了。例如,1不再是真的。 – mbroshi