AWS MySQL RDS与AWS DynamoDB [关闭]


109

我已经使用MySQL已有一段时间了,对它的结构和SQL查询等感到很满意。

当前正在AWS中构建新系统,我一直在研究DynamoDB。目前我对此只了解一点。

一个比另一个好吗?

DynamoDB有什么优势?

从MySQL查询等到该扁平样式数据库的过渡是什么样的?

Answers:


67

您可以在此处阅读有关它的AWS解释。

简而言之,如果您主要有Lookup查询(而不是Join查询),则DynamoDB(和其他NoSQL DB)更好。如果需要处理大量数据,则在使用MySQL(和其他RDBMS)时会受到限制。

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


262

实际上,DynamoDB和MySQL是苹果和橙子。DynamoDB是NoSQL存储层,而MySQL用于关系存储。您应该根据应用程序的实际需求选择要使用的内容。实际上,同时使用某些应用程序可能会得到很好的服务。

例如,如果您存储的数据不能很好地用于可通过单个键或键/范围组合进行查询的关系模式(树结构,无模式的JSON表示等),则DynamoDB(或其他NoSQL存储库)可能是您最好的选择。

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

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

RDS具有不必担心基础架构本身的许多相同优点,但是,如果最终需要进行大量写入操作,以至于最大实例大小将不再保持不变,那么您将无所不用其极。选项(您可以使用只读副本水平缩放读取内容)。

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


10
如果可以将您的答案提高100,我会的。
Salil 2014年

信息模型中的某些问题很容易实现NoSQL。当您偶然遇到此类问题时,请问自己一个问题,拥有NoSQL Db是否有意义。其中一些实体是:日志,时间序列数据,社交网络,内容管理,产品目录等
。– user398039

150

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

虽然将DynamoDB用于特定任务可能很有意义,但在DynamoDB之上构建新系统确实不是一个好主意。最佳计划等,您始终需要数据库提供额外的灵活性。

这是我们从DynamoDB迁移的原因:

  1. 索引-除非创建新表,否则无法即时更改或添加键。
  2. 查询-查询数据极为有限。特别是如果您要查询未索引的数据。连接当然是不可能的,因此您必须在代码/缓存层上管理复杂的数据关系。
  3. 备份-与RDS的精巧备份相比,这样繁琐的备份过程令人失望。
  4. GUI-错误的UX,有限的搜索,没有乐趣。
  5. 速度-与RDS相比,响应时间有问题。您会发现自己建立了完善的缓存机制,以补偿您本来应该为RDS内部缓存解决的地方。
  6. 数据完整性-尽管流体数据结构的概念一开始听起来很不错,但您的某些数据最好“固定”。当一个小错误试图破坏您的数据库时,强类型输入是一种祝福。使用DynamoDB,一切皆有可能,实际上任何可能出错的事情都可以。

现在,我们将DynamoDB用作某些系统的备份,我敢肯定,将来会在特定的,定义明确的任务中使用它。这不是一个不好的数据库,也不是为100%的核心系统服务的数据库。

就优势而言,我要说可扩展性和持久性。它难以置信且透明地扩展,并且一直在(某种程度上)扩展。这些确实是很棒的功能,但不能以任何方式弥补其不利方面。


11
非常具体的优点/缺点。好的答案
stevendesu 2014年

10
其中一些已过时。例如,1不再为真。
mbroshi

2
记录良好的答案。但是,其中一些问题可能仅针对罕见的用例。数字2-“加入当然是不可能的”-DynamoDB数据结构不应有任何关系-句点。表应完全去规范化。这意味着某些属性会重复。在这种情况下,请使用发电机触发器或条件写入。如果用户无法处理条件写入的延迟,请在应用程序和发电机之间放置一个SQS队列。此外,第6点被错误命名为对DynamoDB的“完整性”产生怀疑-这可能不是故意的……
doles

1
Dynamo在查询时仍然缺乏灵活性。尽管GSI提供了巨大的帮助,但是我们仍然可以使用RDBMS模式更好地对数据建模。
帕万

1
我要补充一点,DynamoDB内的查询功能有一些“陷阱”。例如,如果您的主键仅包含一个哈希,则Dynamo查询只能返回1个条目,您不能在查询时提供仅哈希键的范围,也不能在不知道特定哈希值的情况下进行查询您要寻找的项目。BatchGet仅接受请求中的100个获取,总响应大小为1MB或总查询大小为1MB,以先到者为准。扫描为您提供了灵活的搜索功能,但效率极低且成本很高,在过滤之前会返回整个表。
布鲁克斯

12

使用DynamoDB时,您还应该知道DynamoDB中的项目/记录限制为400KB(请参阅DynamoDB限制)。在许多用例中,这是行不通的。因此,DynamoDB仅适用于少数事物,但并非全部。许多其他NoSQL数据库也是如此。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.