什么?你还不知道SQL和 NOSQL?

1 2017-07-13 12:00:12 下午 478 | 大数据

2017 / 07 / 13 星期四

 Article |  朴俊

Pagemaker | 谭文静


01

什么是SQL与NOSQL?

相信对计算机技术有所了解的都听说或使用过SQL(Structured Query Language),它始于上世纪八十年代,是一种结构化查询语言,主要功能就是同各种数据库建立连接,方便的对数据库进行增删改查操作,使用SQL的代表数据库有MySQL、Oracle、SQL Server等。SQL近几十年在软件开发等领域一直处于霸主地位,基本所有使用到数据存储与查询的场景都有SQL的影子。

NOSQL(Not Only SQL)意味着不仅仅是SQL,还意味着在设计一个软件解决方案或产品时,可以根据需求有一个以上更多选择的存储机制。相对于SQL知道的人少了很多,这个词最早出现在1998年,虽然出现了这么多年,但是直到2009年开始才慢慢为开发者们所知。

 

02

为什么NOSQL近年来发展迅速?

随着大数据时代的来临,非结构化的碎片数据在元数据中占比激增,开发者们经常发现初期使用SQL设计的数据结构在后续的操作中不再能满足需求了,而且随着数据量的增大,效率也表现得不尽人意。在这种大环境下,大数据开发者们急需一个高并发读写、高可扩展性、海量数据存储的数据库,这时NOSQL进入了开发者们的眼帘,下图为数据库的发展趋势。

图为DB-Engines发布的前九大数据库的发展趋势图

由上图可知MySQL、Oracle、SQL Server的热度还是稳稳占据前三名,NOSQL的代表MongoDB、cassandra、Redis的热度在成倍增长中,可见开发者们对NOSQL越发青睐,也证明了其在大数据应用中的可用性。

 

03

NOSQL相对于SQL的优势

(1)高扩展性。

由于其不同与关系型数据库的非关系型特性,数据之间无关系,使其具有非常优秀的拓展能力。也无形之间提升了其在整个架构层面的高拓展能力(如集群节点的增加),让其在集群模式下的分布式存储具有极强优势。

(2)高效读写。

NOSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。一般MySQL使用Query Cache,每次表的更新Cache就失效,是一种大粒度的Cache,在针对web2.0的交互频繁的应用,Cache性能不高。而NOSQL的Cache是记录级的,是一种细粒度的Cache,所以NOSQL在这个层面上来说就要性能高很多了。

(3)以网络为中心。

灵活的数据模型:在关系型数据库中增删字段是非常麻烦的事情,尤其在数据量大的时候,在关系型数据库增加字段耗时极久。NOSQL无须遵循关系型数据库的ACID理论,以列式管理记录的NOSQL数据库可以管理大规模的动态列,不需要提前指定字段类型与字段个数,极大的方便了对非结构化数据的存储(Cassandra号称支持最多20亿列)。

(4)高可用。

NOSQL在不太影响性能的情况,就可以方便的实现高可用的架构。比如mongodb通过mongos、mongo分片就可以快速配置出高可用配置。

 

04

NOSQL相对于SQL的劣势

不支持事务:由于其在架构设计上就注定了不支持事务,无形中增加了使用关系型数据库的企业的学习与迁移成本。同时也带来了其不支持复杂的数据查询等问题(如cassandra不支持联合查询与范围查询,需要借助solr等工具来完成复杂的查询)。

不够成熟:主流NOSQL数据库大多依托于初创公司,如Mongdb由MongoDB Inc提供支持,cassandra由datastax提供支持。相比于发展了数十年的关系型数据库,和关系型数据库几十年的完善不可同日而语。

 

05

NOSQL与SQL的取舍

SQL与NOSQL不能说明谁好谁不好,也没有谁能替代谁,就像船不能替代汽车一样,它们在不同的场景中它们各有千秋。元数据数量中等,多为结构化数据且查询语句的复杂度较高的场景中,SQL肯定为第一首选。但是当元数据多为非结构化数据且多达数千万甚至数十亿条的场景中,NOSQL或许是更好的选择了。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

*