AWS MySQL RDS与AWS DynamoDB的比较 [已关闭]
AWS MySQL RDS与AWS DynamoDB的比较 [已关闭]
已关闭。该问题是基于观点的。它暂不接受答案。
想要改进此问题吗?更新问题,使其可以通过事实和引用回答,方法是通过编辑此帖子。
改进此问题
我已经使用MySQL一段时间并且对其结构和SQL查询等感到舒适。
目前正在AWS中构建一个新系统,我一直在研究DynamoDB。目前我只了解一点点。
是哪个更好呢?
DynamoDB的优势是什么?
从MySQL查询等过渡到这种扁平样式的DB是什么感觉?
我们刚刚将所有的DynamoDB表迁移到了RDS MySQL。
虽然在特定任务中使用DynamoDB可能是有意义的,但在DynamoDB之上构建新系统实际上是一个糟糕的主意。即使是最好的计划,你也总是需要DB提供额外的灵活性。
这是我们迁移出DynamoDB的原因:
- 索引- 在不创建新表的情况下,无法在运行时更改或添加键。
- 查询- 查询数据非常有限。特别是如果您想查询非索引数据。显然,连接是不可能的,因此您必须在代码/缓存层管理复杂的数据关系。
- 备份- 与RDS的顺畅备份相比,这种繁琐的备份过程令人失望。
- GUI- UX不佳,搜索有限,不好玩。
- 速度- 响应时间与RDS相比是有问题的。您会发现自己在一些地方构建复杂的缓存机制来弥补它,而在这些地方您本来会满足于RDS的内部缓存。
- 数据完整性- 虽然流体数据结构的概念听起来不错,但你的某些数据最好是“定死”的。强类型是一个福音,当一个小错误试图破坏您的数据库时。使用DynamoDB,任何事都有可能发生,事实上,任何可能出错的事情都会发生。
我们现在将DynamoDB用作一些系统的备份,并且我相信我们将来会将其用于特定的,定义良好的任务。它不是一个糟糕的DB,但它不是适合100%核心系统的DB。
就优点而言,我会说可扩展性和可靠性。它的扩展性和透明性非常好,并且它(有点)总是启动的。这些确实是很好的特点,但它们并没有以任何方式弥补缺点方面的缺陷。
DynamoDB和MySQL是两个不同的存储方式。DynamoDB是一种NoSQL存储层,而MySQL则用于关系型存储。你应该根据你的应用实际需求来选择使用哪个。实际上,有些应用程序可以通过同时使用两者来得到更好的服务。
比如,如果你需要存储的数据无法适应关系型模式(树形结构、无模式的JSON表示等),并且能够根据单个键或键/范围组合进行查找,那么DynamoDB(或其他一些NoSQL存储层)可能是你最好的选择。
如果你的数据有一个良好定义的关系模式,可以很好地适应关系型结构,并且你需要以多种不同的方式查询数据(当然要根据需要添加索引),那么RDS可能是更好的解决方案。
作为NoSQL存储层使用DynamoDB的主要好处是,你可以在需要的吞吐量水平上得到保证的读取/写入吞吐量,无需担心管理集群数据存储。因此,如果你的应用程序需要每秒1000次读取/写入,你只需为你的DynamoDB表提供这个吞吐量级别,就不需要担心基础架构。
RDS有很多和不需要担心基础架构本身的同样的好处,但是如果你需要做大量的写入,以至于最大实例大小无法跟上,你就没有什么选择(你可以使用读副本进行横向扩展以满足读取需求)。
更新说明:DynamoDb现在支持全局二级索引,因此你现在有能力在除了散列表或散列表和范围键组合的数据字段上执行优化的查找。