相对于

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

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

一个比另一个好吗?

DynamoDB 的优点是什么?

从 MySQL 查询等到这个平面样式数据库的转换是什么样的?

98074 次浏览

您可以阅读 AWS 关于它的解释 here

In short, if you have mainly 查一下 queries (and not Join queries), DynamoDB (and other NoSQL DB) is better. If you need to handle 很多数据, you will be limited when using MySQL (and other RDBMS).

You can't reuse your MySQL queries nor your data schema, but if you spend the effort to learn NoSQL, you will add an important tool to your tool box. There are many cases where DynamoDB is giving the simplest solution.

实际上,DynamoDB 和 MySQL 是两回事。DynamoDB 是一个 NoSQL 存储层,而 MySQL 用于关系存储。您应该根据应用程序的实际需要选择使用什么。实际上,通过同时使用这两种方法可以很好地服务于一些应用程序。

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

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

The main benefit for using DynamoDB as a NoSQL store is that you get guaranteed read/write throughput at whatever level you require without having to worry about managing a clustered data store. So if your application requires 1000 reads/writes per second, you can just provision your DynamoDB table for that level of throughput and not really have to worry about the underlying infrastructure.

RDS 具有不必担心基础设施本身的同样好处,但是如果您最终需要执行大量的写操作,以至于最大的实例大小无法跟上,那么您就没有选择了(您可以使用读副本水平扩展读操作)。

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

在使用 DynamoDB 时,您还应该知道 DynamoDB 中的条目/记录限制为400KB (参见 DynamoDB 限制)。对于许多用例来说,这不会起作用。所以 DynamoDB 只适用于少数几种情况,但不适用于所有情况。其他许多 NoSQL 数据库也是如此。

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

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

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

  1. 索引——如果不创建新表,就不可能动态更改或添加键。
  2. 查询-查询数据是非常有限的。特别是如果您想查询非索引数据。连接当然是不可能的,因此您必须在代码/缓存层上管理复杂的数据关系。
  3. Backup - Such a tedious backup procedure is a disappointing surprise compared to the slick backup of RDS
  4. GUI-糟糕的用户体验,有限的搜索,没有乐趣。
  5. 与 RDS 相比,速度-响应时间是有问题的。您发现自己正在构建复杂的缓存机制,以弥补 RDS 内部缓存的不足。
  6. 数据完整性-虽然流动数据结构的概念一开始听起来不错,但是有些数据最好是“一成不变”。当一个小错误试图破坏您的数据库时,强类型化是一件好事。使用 DynamoDB,任何事情都是可能的,事实上任何可能出错的事情都会出错。

We now use DynamoDB as a backup for some systems and I'm sure we'll use it in the future for specific, well defined tasks. It's not a bad DB, it's just not the DB to serve 100% of your core system.

就优势而言,我认为是可伸缩性和持久性。它的规模令人难以置信和透明,它(排序)总是向上。这些都是非常棒的特性,但它们并不能以任何方式弥补不利的方面。