NoSQL 的选择 -- Redis、MongoDB、Cassandra 与 HBase 的介绍与比较

2015-03-22 00:51:51   最后更新: 2016-11-15 11:11:04   访问数量:12000




 

在 db-engines 网站上,我们看到,数据库系统的主要市场虽然还是被 Oracle、Mysql、Ms SQL Server 三个关系型数据库所占据,但是 NoSql 的数据库也正在呈现上升态势

虽然业内传闻的关于 DBA 将死的传言有些过于夸张,但是几个 NoSQL 数据库以其难以替代的优势抢占了很大的一部分市场

 

与传统的 DBA 相比,NoSQL 至少具有以下优势:

  1. 便于扩展,这也正是很多 NoSQL 数据库设计的初衷
  2. 他们在低成本的硬件上拥有更好的性能
  3. 支持大数据量,这正是传统 DBA 越来越让人无法忍受的一点
  4. 便于管理,拥有自动修复、分布式备份以及更简单的数据模型,提高了系统性能与数据的安全性
  5. 灵活的数据模型,传统的关系型数据库在数据模型上的限制是非常大的,而 NoSQL 恰恰在这一点上拥有先天性的优势
  6. 存储非结构化数据,世界上 80% 的商业化数据是非结构化的,更重要的是,非结构化数据的增长速度是结构化数据的两倍

 

虽然目前市场上已经有上百款 NoSQL,但实际上,市场上主要是在 Redis、Cassandra、Hbase 和 MongoDB 四款 NoSQL 中进行选择

 

下面我们一一来介绍他们的不同:

 

Redis 是使用 C++ 开发的高性能 NoSQL 数据库,他以其卓越的性能以及异常快速的读写速度成为了高速内存、缓存存储的首选

Redis 的另一个优势在于,它支持多种结构的存储:

  1. 列表(队列,阻塞式 pop 等)
  2. SET(支持 union、diff、inter 等)
  3. hash 表(带有多个域的对象)
  4. 排序 SET(高得分表,适用于范围查询)

同时他支持事务,并且集成了一个小型消息队列

 

但是自 Redis2.4 以后,他不再支持数据交换到硬盘,因此在数据持久化方面有所欠缺,而同时,虽然 redis 支持主从模式的复制备份,但是为了提供高可用性,同时只能有一台服务器处理所有的复制请求

 

Redis 非常适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序

例如:股票价格、数据分析、实时数据搜集、实时通讯

 

MongoDB 作为一个易学易用的数据库被广泛开发者接受,因为其保留了对 SQL 的一些友好特性(查询索引),虽然它的功能接近于传统的关系型数据库,但是因为它能够轻松定义各种灵活的数据模型,可以支持不同类型的数据集存储

MongoDB 同样是使用 C++ 编写的 NoSQL 数据库,他支持使用 javascript 进行查询,读写性能优越,但不支持事务和表连接,不过查询语句的编写、理解和优化得以变得简单很多

 

MongoDB 非常适用于高并发场景,其对事务性的牺牲换来了数据访问的低延迟而被广泛称道

 

至于 MongoDB 的操作,可以参看:

MongoDB 与MySql 语法比较

 

在大规模集群下,用户往往倾向于选择 Cassandra 作为存储,因为在这样的应用场景下,去增强一个关系型数据库的性能和可靠性是非常困难的,而这些正是 Cassandra 的设计初衷

Cassandra 在机器拓展部署上,表现非常出色,这正是如今业务高速增长传统 RDBMS 处理很棘手的一个问题

Cassandra 自带的备份机制,保证了各个数据中心的数据安全,而对于集群的扩容,只需要更改相应的配置,Cassandra 就会自动的完成相应的操作

他使用十分类似 SQL 的 CQL 查询语言进行数据库的查询,十分易学易用

 

作为 Apache 使用 java 开发的分布式 KV 存储引擎,虽然本身较为臃肿和复杂,但在分布式环境下,还是一个非常好的选择

由于 Cassandra 的写性能优于读性能,所以他也常常被用在类似日志等写操作多于读操作的应用场景下

 

可以参看:

Cassandra 的数据模型及使用

 

与 Cassandra 一样,HBase 也是使用 java 开发的 K-V 模型面向存储的服务,同时,他与 Hadoop 有着相同的血统,也同样被广泛使用

HBase 的设计初衷是提供快速随机读取和写入数据,以弥补 Hadoop 的缺陷,而 Hadoop 为了增加其系统吞吐量而不得不牺牲了其 IO 读写效率

与 Hadoop 相同,HBase 也将数据存储在 HDFS 上,而将有效录入存储在内存中,达到较高的性能

它支持多种方式进行数据读取,包括 SQL 查询甚至基于自由文本的搜索(Cloudera Search)

 

它在 BigTable之后建模,采用分布式架构 Map/reduce 对实时查询进行优化,非常适用于 需要对大数据进行随机、实时访问的场合

Facebook 消息数据库正是使用 HBase 作为其存储的

 

正如 OO 专家 Martin Fowler 所说:任何像样规模的企业都会使用各种不同类型的数据存储技术,为应对各种不同类型的数据

 

欢迎关注微信公众号,以技术为主,涉及历史、人文等多领域的学习与感悟,每周三到七篇推文,只有全部原创,只有干货没有鸡汤

 






技术帖      c++      cpp      c语言      mongo      sql      技术分享      存储      c      redis      hadoop      db      分布式      hbase      cassandra      dbms      rdbms      nosql      cql      java      hdfs     


京ICP备2021035038号