在 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 的另一个优势在于,它不仅支持传统的 key、string,还支持多种结构的存储: 1. 列表 2. 集合 3. 哈希表 4. 排序集合 同时他支持事务和持久化以及集群的搭建
Redis 非常适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序。 例如:股票价格、数据分析、实时数据搜集、实时通讯。
MongoDB 作为一个易学易用的数据库被广泛开发者接受,因为其保留了对 SQL 的一些友好特性(查询索引),虽然它的功能接近于传统的关系型数据库,但是因为它能够轻松定义各种灵活的数据模型,可以支持不同类型的数据集存储。 MongoDB 同样是使用 C++ 编写的 NoSQL 数据库,他支持使用 javascript 进行查询,读写性能优越,但不支持事务和表连接,不过查询语句的编写、理解和优化得以变得简单很多。
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 所说:任何像样规模的企业都会使用各种不同类型的数据存储技术,为应对各种不同类型的数据。