AWS MySQL RDS与AWS DynamoDB

时间:2012-12-20 06:17:06

标签: mysql database amazon-web-services amazon-dynamodb

我现在一直在使用MySQL,我很熟悉它的结构和功能。 SQL查询等。

目前正在AWS中构建一个新系统,我一直在关注DynamoDB。目前我只知道一点。

一个比另一个好吗?

DynamoDB有什么优势?

从MySQL查询等到这个平面样式DB的过渡是什么?

4 个答案:

答案 0 :(得分:212)

真的,DynamoDB和MySQL都是苹果和橘子。 DynamoDB是NoSQL存储层,而MySQL用于关系存储。您应该根据应用程序的实际需要选择要使用的内容。事实上,使用两者都可以很好地满足一些应用程序。

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

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

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

RDS具有很多相同的好处,不必担心基础设施本身,但是如果您最终需要对最大实例大小将不再跟上的点进行大量写操作,那么您是善良的左边没有选项(你可以使用只读副本水平缩放读数)。

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

答案 1 :(得分:126)

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

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

以下是我们从DynamoDB迁移的原因:

  1. 索引 - 如果不创建新表,则无法即时更改或添加密钥。
  2. 查询 - 查询数据非常有限。特别是如果您想查询非索引数据。连接当然是不可能的,因此您必须在代码/缓存层上管理复杂的数据关系。
  3. 备份 - 与RDS的光滑备份相比,这种繁琐的备份程序令人失望。
  4. GUI - 糟糕的用户体验,有限的搜索,没有乐趣。
  5. 速度 - 与RDS相比,响应时间有问题。您会发现自己构建了精心设计的缓存机制,以便在您为RDS内部缓存确定的位置进行补偿。
  6. 数据完整性 - 虽然流体数据结构的概念听起来不错,但您的一些数据更好“一成不变”。当一个小bug试图破坏你的数据库时,强打字是一种祝福。使用DynamoDB一切皆有可能,事实上任何可能出错的事情都可以。
  7. 我们现在使用DynamoDB作为某些系统的备份,我相信我们将来会将它用于特定的,定义明确的任务。这不是一个糟糕的数据库,它不是为100%的核心系统提供服务的数据库。

    就优势而言,我会说可伸缩性和耐用性。它以令人难以置信的透明方式进行扩展,并且(总是向上)。这些都是非常好的功能,但它们不会以任何方式弥补不利方面的影响。

答案 2 :(得分:51)

您可以阅读有关它的AWS说明here

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

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

答案 3 :(得分:10)

使用DynamoDB时,您还应该知道DynamoDB中的项目/记录限制为400KB(请参阅DynamoDB Limits)。对于许多用例,这不起作用。因此,DynamoDB对于一些事情是好的,但不是全部。许多其他NoSQL数据库也是如此。