数据库选型总结
MongoDB
特点
每一行数据被转化为JSON存储,没有表结构的概念,所以表结构灵活多变,字段类型恶意随时修改。
缺点
由于表结构可以随时修改,所以不适合多表查询,复杂事务等情况(这种场景Mysql这种关系型数据库更合适)
适合场景
适合表结构经常变化,但数据的逻辑结构不复杂,不需要多表查询操作,且数据量比较大的场景
Redis
特点
Key - Value 形式存储数据,结构简单,性能高,Redis会把所有数据加载到内存中的。Redis能得到远高于MongoDB这类常规数据库的读写性能,Redis还支持数据持久化,list、set等多种数据结构,主从复制备份等一些列功能
缺点
key - Value 存储对性能来说是优势,当对复杂查询是劣势
适合场景
Redis牺牲了常规数据库中的数据表、复杂查询等功能,换来了很大的性能提升,特别适合那些对读写性能要求极高,且数据表结构简单(key-value、list、set之类)、查询条件也同样简单的应用场景。
ElasticSearch
特点
特别适合搜索的数据库(或者叫搜索引擎),ES的所有特性都是围绕搜索设计的。ES支持全文搜索。ES的全文搜索对中文也有很好的支持(单是中文分词器就有很多种),绝对能够满足国内大多数人的全文搜索需求。除了搜索之外,ES还会自动的替你对所有字段建立索引,以实现高性能的复杂聚合查询,因此只要是存入ES的数据,无论再复杂的聚合查询也可以得到不错的性能,而且你再也不用为如何建立各种复杂索引而头痛了。
缺点
最明显的就是字段类型无法修改、写入性能较低和高硬件资源消耗
适合场景
ES的全文搜索特性使它成为构建搜索引擎的利器。除此之外,ES很好的支持了复杂聚合查询这一特点还使得ES非常适合拿来作数据分析使用;绝对是构建高大上数据分析平台的利器;但是,ES的高成本和低写入性能这些缺点也注定了它不适合用在那些数据价值不高、对写入性能有要求、数据量大而成本受限的场景中。
Hase
特点
HBase继承了Hadoop项目的最大优点,那就是对海量数据的支持,以及极强的横向(存储容量)扩展能力
HBase进行横向扩展也非常方便,你基本只需要添加新的机器,而不用对数据做任何改动,就可以实现数据库容量线性的增长,这在其他SQL数据库中是难以做到的
和Redis类似,HBase也需要为每一行数据定义一个key,之后所有的查询都依赖这个key进行。但是不同的地方在于,HBase中的一行数据还可以有非常多的列项(类似MongoDB字段),数据会按照列进行分组和存储,同一列的数据存储在同一个地方,这也是HBase被称为列式存储数据库的原因。其实从本质上来说,HBase相当于是把逻辑上的一张大表按照列族分拆成若干张小表分别进行存储,不仅是列,数据的行数到达一定数量后表也会再被拆分。因此,HBase能够把巨大的表分布到很多台机器上,从而容纳规模近乎无限的数据
缺点
HBase的列式存储特性带来了海量数据规模的支持和极强的扩展能力,但是也给数据的读取带来很大的局限;由于只有同一列族的数据才会被存放在一起,而且所有的查询都必须要依赖Key,这就使得很多复杂查询难以进行;
查询效率低下
HBase是很重的一款产品,需要依赖很多的Hadoop组件,因此如果你的数据规模不大,那就完全没必要杀鸡用牛刀,MongoDB这类产品完全可以更好的满足你的需求。
适合场景
HBase的列式存储特点带来了对海量数据的容纳能力,因此非常适合数据量极大,查询条件简单,列与列之间联系不大的轻查询应用场景