大萧条时期的野蛮生长——NoSQL导读

一起养成写作习惯!这是我参与「掘金日新计划·4月更文挑战」的第5天,点击查看活动详情

前面diss了很多mysql的不是,mysql当然还是很强的,尤其是对事务的支持,对于一些关键信息,一致性要比性能来的更重要。但在一些大量读取,大数据分析查询的场景下,mysql甚至会全表扫描数据,这样不仅性能更差,也会影响其他业务。所以急需一些NoSQL来作为mysql的补充。所谓NoSQL就是不需要写SQL的数据库,下面简单介绍几种。

KV型DB

这种最常见的就是Redis,还有像LevelDB也属于KV存储。这在使用的场景属于是高速读写的高性能场景,但存储容量要小很多和存储成本也会大很多。但一般只存一些关键的业务信息,并且设置过期时间,以满足高性能的要求。这个大家过于熟悉了,不再赘述。

列式存储

这种以Hbase、Cassandra为代表,是大数据时代的数据分析利器。首先什么是列式存储呢?这是一个相对的概念,相对应的mysql是行是存储。下图是对比:

image.png (图片出自出处

行式存储需要设置索引,无论是唯一索引还是联合索引,都是为了更快的找到对应的一行或者多行数据。而列式存储则每一行都是索引,如图所示,如果需要找年龄区间这样的数据,可以直接锁定到第四行,可以说每一行都是索引。这就是列式存储的优势,天生适合做大数据的查询和分析。

检索型

这种的典型代表是es,es相信是很多公司的标配,es实现的原理是索引倒排,在数据写入时根据写入的信息分词成多个单词。然后将分词的结果建立对应的索引,当用户检索单个单词时,返回这个单词对应的数据id,相当于将详细信息变成索引去检索对应的id,这就是所谓的索引倒排。

分布式扩展型

这种的典型代表是mongoDB,几乎没人不知道这个吧。mongo有以下的特性:

  • Replica:数据复制多个副本,任何一个挂了都不会丢失数据,主节点挂了还能自动选主
  • Shard:原生支持分库分表,支持快速横向扩容
  • ReBalance:自动写入负载均衡,部分分库分表的节点写入不均衡时可以自动调整,最终让各个分库数据均匀。

小结

NoSQL可以作为mysql拉胯时的重要补充,但现阶段还是没能力替代mysql,毕竟暂时没有系统可以做到CAP全都要。

猜你喜欢

转载自juejin.im/post/7083520938968350756