刚开始接触到DynamoDB的时候,对它有一种误解:和传统的关系型数据库相比,使用DynamoDB无法有效的进行多表查询。
但随着学习的深入,慢慢明白了,其实DynamoDB和传统关系型数据库可以说是各有所长。DynamoDB如果设计上没有问题,可以进行类似的多表查询,而且效率奇高。但对于超级复杂的多表查询,DyanmoDB并不擅长,这是关系型数据库最为擅长的。
其实,说到DynamoDB,其最大的优点包括:
- 由于基于键/值对的设计,其查询效率超高
- 基于AWS serverless,无维护成本
- 可以auto-scaling,可扩展性好
在传统的关系型数据库中,要进行多表查询,往往会把不同表中的数据通过外键关联之后再进行查询。这样就可以组合出非常灵活的查询条件来。
在NoSQL数据库中,其设计思路从根本上是不同的。因此如果用传统的关系型数据库设计思路来理解,就会很难理解。比如在DynamoDB中,可以把在关系型数据库中的多个表放入在DynamoDB的一个表中,再通过Partition Key, Sort Key以及Global Secondary Index进行”多表“查询。
可以这么说吧,如果DynamoDB在设计时考虑到了这种组合查询的话,在后期进行开发的时候是没有问题的。由于DynamoDB是完全基于键/值进行存储的,因此其查询速度超快。但对于设计时没有考虑到的字段,就无法进行这种查询了。
因此,总结一下:如果有大量多表之间的复杂查询,选择关系型数据库。如果只是简单的”多表“查询,则应该选择NoSQL。可以这么说,90%左右的数据库选用NoSQL更为适合。只有10%左右的用例更适合选择关系型数据库。
不需要 range query 就要用 NoSQL
然后 如果有钱/Budget, 就用 DynamoDB
如果项目肯定是基于AWS的,那么和AWS RDS相比,DynamoDB不贵啊