恩,这个问题,其实要Database的种类讲起。
首先大家知道的DB,一般是MySQL、PostgreSQL、SQL Server等。
这类的数据库成为“关系型数据库”,也就是OLTP。它每一行是一条记录。具体的意思大家自己查查吧。
关系型数据库的优点是可以非常快地找到“这个人”的“所有信息”,因为就一行。
但要是想开始查,有“多少人”,“怎么样”的时候,就会很慢。
一般这个时候,大家会用一个东西,叫index。将记录里的一项,做索引,加速查询。
其实你没意识到,当你加了一个索引的时候,其实你存的数据,是一列。
于是列数据库就不难理解了。这样的数据库是按列存储所有数据。那么此时,”查询某一类“这样的需求就变得很快了。
Clickhouse就是这样的一个数据库,它做count()操作的速度大约是MySQL的几千倍。
也因此,列数据库特别适合做”分析“。
接着讲故事。随着网络的发展,移动应用和社交平台的推广,我们发现,所有的东西都被打上了”标签“。
要想知道你这个人,看你身上的”标签“即可。
一张图片,有”标签“,一次比赛成绩,还是”标签“。
于是key-value型数据库油然而生。
这类数据库特别简单,就是key-value对儿。给我个key,我返回给你value。
快得起飞,但存储的信息,必然没有行数据库和列数据库靠谱。
Redis就是一个key-value型数据库。因为它用内存,而不是用硬盘(硬盘只作为恢复时用),所以我一直把它当成Cache用。
OK,回到最开始的问题:什么时候用Redshift,什么时候用Aurora?
AWS RDS (包括Aurora)- 行数据库
AWS Redshift – 列数据库
AWS DynamoDB – Key-value型数据库
自己有答案了吧?
普通存储,或者存储完整信息,用RDS。
希望数据是用来做分析的,用Redshift。
数据仅仅是用来快速检索,并且更多地适用于移动应用的,用DynamoDB。
所以如果你发现有个需求是把RDS的数据灌入Redshift,那一定是准备调用个Lambda什么的来分析了。
最后多说一点Aurora。
Aurora是AWS自己做的(或者说自己封装的),用来替代MySQL和PostgreSQL的。
MySQL和PostgreSQL是开源的嘛……所以AWS自己封了Aurora。
就像Redis是开源的,然后AWS自己封了个ElasticCache……
用Aurora的好处是自己扩展以及自己备份。当然官网宣称的是他们更快(5倍于MySQL,3倍于PostgreSQL)。
但是我真的对Aurora自动备份特别满意。
尤其是备份,它自动将数据写到6个Volume里,然后存在S3上。
还有一个功能叫Fast local read,其实就相当于在Aurora本地加了Cache。
Aurora还支持serverless,相当于按需使用了。
我对Aurora不满的一点是时至今日(2020年12月),它还只停留在5.7……
