1.什么是NoSQL?
NoSQL呢常见的解释有Non-Relational SQL或者Not Only SQL,不过Not Only SQL被更多人接受,一般泛指非关系型数据库。它和关系型数据库不同的是,不保证关系数据的ACID特性。
随着互联网的发展,NoSQL数据库的产生就是为了解决超大规模和高并发系统中多重数据种类带来的挑战,特别是大数据应用的难题。目前具有代表性的NoSQL数据库有Redis、HBase、ES、MongoDB等等。
NoSQL非常适合以下几个场景:
- 数据模型比较简单;
- 需要灵活性更强的数据库;
- 对数据库性能要求较高;
- 不需要高度的数据一致性;
- 对于给定Key,比较容易映射复杂值的环境。
2.NoSQL分类
通常来说,现在主流的NoSQL数据库可以分为四大类:K-V键值数据库、列存储数据库、文档数据库和图形数据库。
首先来看,K-V键值数据库,主要应用于内容缓存、处理大量数据的高负载访问,也可以用于记录系统日志。比较有代表性的产品有Redis、Memcached等等。
其次是,列存储数据库,主要应用于布式数据的储存与管理,分布式可扩展性强,比较有代表性的产品有HBase、HadoopDB、BigTable等等。
然后就是,文档数据库,主要应用于管理半结构化数据或者面向文档的数据,比较有代表性的产品有MongoDB,ES等等,当然,ES不仅仅只是数据库,它还是一个分布式搜索引擎,是基于Lucene来开发的,现在已经发展成为一个自有生态Elastic Stack。
最后就是,图形数据库,主要应用于复杂、互连接但又低结构化的图结构场合,可以用来构建数据关系图谱,Neo4J、InfoGrid、GraphDB等等。
下面我把四种分类的NoSQL数据库整理成了一个表格,并总结了它们的优缺点。
3、主流NoSQL对比
对于NoSQL数据库对互联网开发的重要性就不多说了,在互联网分布式开发场景中,我认为掌握Redis、HBase、Elastic、MongoDB就能满足绝大部分需求。
如果对数据的读写要求极高,并且数据规模不大,也不需要长期存储,那就选Redis;
如果数据规模较大,对数据的读性能要求很高,数据表的结构需要经常变,有时还需要做一些聚合查询,那就选MongoDB;
如果要构造一个搜索引擎或者要完成一个高大上的数据可视化平台,并且数据本身也具有分析价值,就选ES;
如果你要存储海量数据,而且还不能预估数据规模将来会增长多么大,那么选HBase。
这里我也整理了一种表格,大家可以保存一下:
最后,再给大家来个更加形象的对比:
Redis就相当于开战斗机,MongoDB就相当于坐高铁,HBase就相当于航母,ES那就是帝国铁骑,山地装甲机器人。