一、NoSQL的简介
NoSQL比关系型数据库性能高数倍。NoSQL凭借 “易扩展、大数据、高可用、高性能、灵活性”特点强势引领全场。CP型分布式数据库,能够保证数据的强一致性和分区容忍性。
二、NoSQL的常用种类
1、mongodb
优点:MongoDB最大的特点是表结构灵活可变,字段类型可以随时修改。MongoDB是高性能、无模式的文档型数据库,文件存储格式为BSON(二进制格式的JSON),
支持二级索引,在事务、复杂查询应用下无法取代关系型数据库。支持相比于HBase更复杂的集合查找。
简而言之,往MySQL写数据像是在做填空题,你写入的数据必须与最早定义的表结构一致,而往MongoDB写数据就像是在做问答题,想怎么写就怎么写,这灵活度不要爽太多。
缺点:比较消耗内存,有事务、join(全外连接)等短板。因此,如果你的数据的逻辑结构非常复杂,经常需要进行复杂的多表查询或者事务操作,那显然还是MySQL这类关系型数据库更合适。
使用场景:得益于MongoDB的这些特点,MongoDB很适合那些表结构经常改变,数据的逻辑结构没又没那么复杂不需要多表查询操作,数据量又比较大的应用场景。
2、redis
Redis是现在最热门的key-value数据库,是内存亦可持久化的日志型,读写性能最强。提供五种数据类型:String,hash,list,set及zset(sorted set)。
适合存储全局变量和高效的分布式缓存。当内存达到一定的阈值,数据可以定时持久化到硬盘中。
优点:Redis的最大特点当然就是key-value存储所带来的简单和高性能了。适合读多写少的业务场景,支持操作原子性。
缺点:不支持二级索引。也不适合做存储和分析。因此Redis无法提供常规数据库所具备的多列查询、区段查询等复杂查询功能。
同时,由于Redis需要把数据存在内存中,因此数据量要小于HBase与MongoDB。
应用场景:Redis牺牲了常规数据库中的数据表、复杂查询等功能,换来了很大的性能提升,特别适合那些对读写性能要求极高,且数据表结构简单(key-value、list、set之类)、查询条件也同样简单的应用场景。
如果你的数据表结构还挺复杂,你还经常需要做一些复杂查询操作,那你最好还是老老实实用MongoDB或者SQL吧。
3、Hbase
HBase是Hadoop项目的一部分,HBase列式数据库,BigTable的一种实现。高效存储大量数据,支持列压缩,行事务。适合Schema-less的数据,
适合稀疏表,一个表可以容纳上亿行、上百万列,用做超大数据量要求扩展简单的离线分析型应用。Hadoop的无缝集成,有数据可靠性和海量数据分析性能(MapReduce)的能力。
优点:HBase也继承了Hadoop项目的最大优点,那就是对海量数据的支持,以及极强的横向(存储容量)扩展能力。
缺点:HBase的列式存储特性带来了海量数据规模的支持和极强的扩展能力,但是也给数据的读取带来很大的局限。
由于只有同一列族的数据才会被存放在一起,而且所有的查询都必须要依赖Key,这就使得很多复杂查询难以进行。
应用场景:作为MapReduce(大规模数据集(大于1TB)的并行运算)的后台数据源;Facebook的消息类应用,包括Messages、Chats、Emails和SMS系统,用的都是HBase。
综上所述:
如果你对数据的读写要求极高,并且你的数据规模不大,也不需要长期存储,选redis;
如果你的数据规模较大,对数据的读性能要求很高,数据表的结构需要经常变,有时还需要做一些聚合查询,选MongoDB;
如果你需要存储海量数据,连你自己都不知道你的数据规模将来会增长多么大,那么选HBase。