1.2 NoSQL与传统RDBMS
NoSQL是Not only SQL的缩写,泛指非关系数据库,如HBase、MangoDB、Cassandra等。与传统的关系数据库相比,NoSQL最大的特征就是数据存储不需要一个特定的模式,并具有强大的水平扩展能力。
随着“大数据时代”的到来,特别是超大规模与高并发的社交类型网站的诞生,传统的关系数据库在以下几个方面已经无法满足这些应用系统架构在横向扩展方面的需求了。
(1)并发性:关系数据库更依赖单机性能,对于上万的每秒查询数(Query Per Second,QPS),硬盘I/O无法支撑,并且关系数据库除了写数据还要写索引,而NoSQL,以HBase为例,写入为顺序写入,如果能够容忍部分数据丢失,不写入预写入日志(Write-Ahead-Log,WAL),HBase写入只需写内存,速度大大提高。同时HBase通过分片可以将一台机器的压力均衡地转移到集群的每一台机器。
(2)可扩展性:现在一般的在线系统可用性至少要求达到99.9%,对于淘宝、天猫这种与金钱密切相关的系统,可用性要求就更高了。传统关系数据库的升级和扩展对于系统的可用性是一个很头疼的问题,可能需要停机迁移数据、重启加载新配置等,而且需要运维人员、开发人员、数据库管理员(Database Administrator,DBA)的密切配合,而HBase集群具有线性伸缩、自动容灾和负载均衡的优势,可以很容易地增加或者替换集群节点以扩展集群的存储和计算能力。
(3)数据模型:关系数据库需要为存储的数据预先定义表结构与字段名,而NoSQL无须事先为需要存储的数据定义一个模式,这样可以更容易、更灵活地适配各种类型的非结构化数据。
当然,并不是说NoSQL已经全面优于关系数据库了。NoSQL相比关系数据库也有很多缺点,例如HBase不支持多行事务;基于LSM存储模型导致NoSQL需要读取多个文件来找到需要的数据,这样会牺牲一些读的性能。可以说NoSQL是对关系数据库的一种补充。