AWS MySQL RDS与AWS DynamoDB

Ada*_*dam 100 mysql database amazon-web-services amazon-dynamodb

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

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

一个比另一个好吗?

DynamoDB有什么优势?

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

Mik*_*ant 234

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

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

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

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

RDS具有很多相同的好处,不必担心基础结构本身,但是如果你最终需要对最大实例大小将不再保持的那一点进行大量写操作,那么你就有点没有了选项(您可以使用只读副本水平扩展读取).

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

  • 如果我可以100回答你的答案,我愿意. (7认同)
  • 你几乎有100个upvotes的愿望:) (3认同)

小智 136

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

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

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

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

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

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

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

Guy*_*Guy 58

您可以在此处阅读有关它的AWS说明.

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

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


小智 12

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