NoSQL 的选择 -- Redis、MongoDB、Cassandra 与 HBase 的介绍与比较
2015-03-22 00:51:51 最后更新: 2016-11-15 11:11:04 访问数量:12000
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 至少具有以下优势:
虽然目前市场上已经有上百款 NoSQL,但实际上,市场上主要是在 Redis、Cassandra、Hbase 和 MongoDB 四款 NoSQL 中进行选择
下面我们一一来介绍他们的不同:
Redis 是使用 C++ 开发的高性能 NoSQL 数据库,他以其卓越的性能以及异常快速的读写速度成为了高速内存、缓存存储的首选
Redis 的另一个优势在于,它支持多种结构的存储:
同时他支持事务,并且集成了一个小型消息队列
但是自 Redis2.4 以后,他不再支持数据交换到硬盘,因此在数据持久化方面有所欠缺,而同时,虽然 redis 支持主从模式的复制备份,但是为了提供高可用性,同时只能有一台服务器处理所有的复制请求
Redis 非常适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序
例如:股票价格、数据分析、实时数据搜集、实时通讯
MongoDB 作为一个易学易用的数据库被广泛开发者接受,因为其保留了对 SQL 的一些友好特性(查询索引),虽然它的功能接近于传统的关系型数据库,但是因为它能够轻松定义各种灵活的数据模型,可以支持不同类型的数据集存储
MongoDB 同样是使用 C++ 编写的 NoSQL 数据库,他支持使用 javascript 进行查询,读写性能优越,但不支持事务和表连接,不过查询语句的编写、理解和优化得以变得简单很多
MongoDB 非常适用于高并发场景,其对事务性的牺牲换来了数据访问的低延迟而被广泛称道
至于 MongoDB 的操作,可以参看:
在大规模集群下,用户往往倾向于选择 Cassandra 作为存储,因为在这样的应用场景下,去增强一个关系型数据库的性能和可靠性是非常困难的,而这些正是 Cassandra 的设计初衷
Cassandra 在机器拓展部署上,表现非常出色,这正是如今业务高速增长传统 RDBMS 处理很棘手的一个问题
Cassandra 自带的备份机制,保证了各个数据中心的数据安全,而对于集群的扩容,只需要更改相应的配置,Cassandra 就会自动的完成相应的操作
他使用十分类似 SQL 的 CQL 查询语言进行数据库的查询,十分易学易用
作为 Apache 使用 java 开发的分布式 KV 存储引擎,虽然本身较为臃肿和复杂,但在分布式环境下,还是一个非常好的选择
由于 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 所说:任何像样规模的企业都会使用各种不同类型的数据存储技术,为应对各种不同类型的数据
欢迎关注微信公众号,以技术为主,涉及历史、人文等多领域的学习与感悟,每周三到七篇推文,只有全部原创,只有干货没有鸡汤