`

【大话NoSQL】——什么是NoSQL?

阅读更多

开始之前,先说说写这篇博文的背景,本来是想写MongoDB的内容,但是MongoDB又是非关系型数据库中最火的一个。我还是本着自己一直习惯的学习步骤,先有全局观,再着眼于微观,所以有必要先了解一下非关系数据库的发展历史,再开始学习MongoDB。否则,我们学习再多的MongoDB也只能是手中的一把沙,抓的越紧,剩下的越少。

整理的博文内容大部分都来自于网络,也有自己一点点见解吧,废话少说,下面进入我们今天的话题:

 

概念

 

NoSQL(NoSQL=Not Only SQL),意即“不仅仅是SQL”。

产生背景

 

随着web2.0的快速发展,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的社会性网络服务类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型、分布式数据存储则由于其本身的特点得到了快速的发展,它们不保证关系数据的ACID特性。

NoSQL概念在2009年被提了出来。NoSQL最常见的解释是“non-relational”,“Not Only SQL”也被很多人接受。在不到一年的时间,NoSQL就开始风生水起,大大小小的Web站点在追求高性能高可靠性方面,不由自主都选择了NoSQL技术作为优先考虑的方面。

NoSQL一词最早出现于1998年,是Carlo Strozzi开发的一个轻量级、开源的、不提供SQL功能的关系数据库。直到2009年NoSQL再次被提出,NoSQL的概念发生了天翻地覆的改变,就像它的名字一样,不提供SQL功能的非关系型数据库。我们知道了NoSQL的产生背景,但是为什么它得到了快速发展?

 

为什么NoSQL得到了快速发展?

 

关键原因是:传统关系型数据库遇到了性能瓶颈。

高并发读写、对海量数据的高效率存储和访问以及对数据库的高可扩展性和高可用性成了关系型数据库难以逾越的鸿沟,关系型数据库应对这三大问题显得力不从心,暴露了很多难以克服的问题,例如:

 

1、High performance - 对数据库高并发读写的需求
web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。其实对于普通的BBS网站,往往也存在对高并发写请求的需求,例如像JavaEye网站的实时统计在线用户状态,记录热门帖子的点击次数,投票计数等,因此这是一个相当普遍的需求。

2、Huge Storage - 对海量数据的高效率存储和访问的需求
类似Facebook,twitter,Friendfeed这样的SNS网站,每天用户产生海量的用户动态,以Friendfeed为例,一个月就达到了2.5亿条用户动态,对于关系数据库来说,在一张2.5亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。再例如大型web网站的用户登录系统,例如腾讯,盛大,动辄数以亿计的帐号,关系数据库也很难应付。

3、High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求
在基于web的架构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,你的数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移,为什么数据库不能通过不断的添加服务器节点来实现扩展呢?

在上面提到的“三高”需求面前,关系数据库遇到了难以克服的障碍,而对于web2.0网站来说,关系数据库的很多主要特性却往往无用武之地,例如:

1、数据库事务一致性需求
很多web实时系统并不要求严格的数据库事务,对读一致性的要求很低,有些场合对写一致性要求也不高。因此数据库事务管理成了数据库高负载下一个沉重的负担。

2、数据库的写实时性和读实时性需求
对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出来这条数据的,但是对于很多web应用来说,并不要求这么高的实时性,比方说我(JavaEye的robbin)发一条消息之后,过几秒乃至十几秒之后,我的订阅者才看到这条动态是完全可以接受的。

3、对复杂的SQL查询,特别是多表关联查询的需求
任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询,特别是SNS类型的网站,从需求以及产品设计角度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能被极大的弱化了。

因此,关系数据库在这些越来越多的应用场景下显得不那么合适了,为了解决这类问题的非关系数据库应运而生,现在这两年,各种各样非关系数据库,特别是键值数据库(Key-Value Store DB)风起云涌,多得让人眼花缭乱。下面,我们具体看一下它的分类:

 

分类

具体每种的区别,可以到百度百科看一下即可。NoSQL具体包括哪些类型、适用场景,我们用一张图来概括一下(远远不止):

 

发展现状

 

NoSQL的发展现状,我们用DB-ENGINES的官方数据来进行具体说明,DB-Engines排行榜会根据各种数据库的受欢迎程度排序,DB-Engines排行榜每月更新一次。2014年12月份的排名情况如下图所示:

DB-Engines(点击查看更多)排行榜

 

从上图我们可以看出,排行中的前100个系统包含了传统关系型数据库以及NoSQL系统。排行的前几名被传统关系型数据库霸占:Oracle、MySQL、SQL Server、PostgreSQL以及DB2。在数据库领域中这些传统数据库仍然一方霸主的存在,然而前100中绝大多数的席位被NoSQL数据库霸占,并且它们变得越发的普及起来。相信,NoSQL的人气将会越来越高。下面再看一下NoSQL的优势:

 

特点

 

易扩展

NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。


大数据量,高性能


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

灵活的数据模型

NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。这点在大数据量的web2.0时代尤其明显。

高可用

NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构。比如Cassandra,HBase模型,通过复制模型也能实现高可用。

 

总结

NoSQL数据库的出现,弥补了关系数据(比如MySQL)在某些方面的不足,在某些方面能极大的节省开发成本和维护成本。MySQL和NoSQL都有各自的特点和使用的应用场景,让关系数据库关注在关系上,NoSQL关注在存储上。

 

下篇博文,我们开始学习NoSQL数据库中最火的一个:MongoDB,谢谢关注。

 

分享到:
评论

相关推荐

    NoSQL介绍PPT

    为什么使用NoSQL? 为什么使用NoSQL? NoSQL的分类 NoSQL有什么特点? NoSQL有什么特点? NoSQL是否完美? NoSQL的一些概念——CAP NoSQL的一些概念——ACID NoSQL的一些概念——BASE NoSQL的一些概念——BASE NoSQL...

    NoSQL开篇——为什么要使用NoSQL

    随着web2.0的快速发展,非关系型、分布式数据存储得到了快速的发展,它们不保证关系数据的ACID特性。NoSQL概念在2009年被提了出来。NoSQL最常见的解释是“non-relational”,“Not Only SQL”也被很多人接受。

    什么是NoSQL?Web2.0和云计算的新宠儿.doc

    随着Web2.0和云计算的兴起,和一些反SQL的倡导,越来越多的大公司加入到NoSQL阵营。Digg、Twitter、Google、微软等等公司已经开始研究NoSQL,并在一些项目中进行实施。许多人甚至抛弃了MySQL开源数据库这个长期以来...

    什么是NoSQL数据库?

    什么是NoSQL 大家有没有听说过“NoSQL”呢?近年,这个词极受关注。看到“NoSQL”这个词,大家可能会误以为是“No!SQL”的缩写,并深感愤怒:“SQL怎么会没有必要了呢?”但实际上,它是“Not Only SQL”的缩写。它...

    大数据应用程序:SQL还是NoSQL?.pdf

    大数据应用程序:SQL还是NoSQL?.pdf

    nosql数据库解读.pptx

    谁是下一代Nosql? nosql数据库解读全文共58页,当前为第1页。 前世 解剖 比武 未来 nosql数据库解读全文共58页,当前为第2页。 无可奈何花落去,似曾相识燕归来 nosql数据库解读全文共58页,当前为第3页。 Berkeley...

    NoSQL数据库PPT.pptx

    什么是NoSQL数据库? NoSQL: 即Not Only SQL 与关系型数据库相对应的,也可理解为 no relational ,即非关系型数据库 。 NoSQL数据库PPT全文共20页,当前为第3页。 二.NoSQL数据库的产生 关系数据库面临挑战 关系...

    Making Sense of NoSQL 【解读NoSQL 英文版】

    第二部分介绍NoSQL最核心的架构模式——键值存储、图存储、列族存储、文档存储;第三部分展现一些常用的NoSQL解决方案,如HA、全文搜索等;第四部分讨论NoSQL的一些高级主题,如函数式编程。 全书理论与实践并重,...

    NoSQL数据库技术实战

    涵盖的内容有:NoSQL与大数据简介、NoSQL的数据一致性、NoSQL的水平扩展与其他基础知识、BigTable与Google云计算原理、Google云计算的开源版本——Hadoop、Dynamo:Amazon的高可用键值对存储、LevelDb——出自Google...

    NoSQL入门介绍

    1.1、NoSQL是什么 1.2、NoSQL为什么会存在 1.3、NoSQL产品分类 1.4、NoSQL技术的特点 1.5、NoSQL技术的不足 1.6、NoSQL的适用场景 2、一些概念 2.1、CAP 2.2、ACID 2.2、BASE 3、常见NoSQL介绍 3.1、文档型举例...

    大数据与NOSql概述.pptx

    主要内容 Nosql概述 什么是NoSQL NoSQL的优势和不足 NoSQL的CAP理论实现 NoSQL数据模型及分类 大数据与NOSql概述全文共23页,当前为第3页。 大数据的定义 大数据(big data),指无法在一定时间范围内用常规软件...

    nosqlbooster4.5.4 和注册机

    nosqlbooster4mongo-4.5.4 NoSQL Manager for MongoDB Pro

    NoSQL(中文版)

    NoSQL(中文版)

    NoSQLBooster for MongoDB

    NoSQLBooster 管理MongoDB的工具。这个工具还有个曾用名--mongobooster

    NoSQL 入门.ppt

    1.1、NoSQL是什么 1.2、NoSQL为什么会存在 1.3、NoSQL产品分类 1.4、NoSQL技术的特点 1.5、NoSQL技术的不足 1.6、NoSQL的适用场景 2、一些概念 2.1、CAP 2.2、ACID 2.2、BASE 3、常见NoSQL介绍 3.1、文档型举例介绍...

    《NoSQL数据库原理与应用案例教程》PPT课件(共9单元)第4章 HBase原理实现.pdf

    《NoSQL数据库原理与应用案例教程》PPT课件(共9单元)第4章 HBase原理实现.pdf《NoSQL数据库原理与应用案例教程》PPT课件(共9单元)第4章 HBase原理实现.pdf《NoSQL数据库原理与应用案例教程》PPT课件(共9单元)第4章 ...

    什么是NoSQL

    NoSQL的支持者称,通过NoSQL架构可以省去将Web或Java应用和数据转换成SQL友好格式的时间,执行速度变得更快。

    NoSQLBooster for MongoDB v4.7.5-破解版.rar

    破解步骤: 1、hosts添加127.0.0.1 nosqlbooster.com、127.0.0.1 www.nosqlbooster.com 2、覆盖resources文件 3、输入License

    NoSQL精粹_中文完整版

    NoSQL精粹NoSQL精粹NoSQL精粹NoSQL精粹NoSQL精粹NoSQL精粹

    数据库nosql

    NOsql基础描述 详细讲解了nosql基础原理,

Global site tag (gtag.js) - Google Analytics