`

【大话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

    NoSQL,全称为“Not Only SQL”,是一种非关系型数据库技术,主要针对现代互联网应用的高并发、大数据量和分布式存储需求。随着Web2.0的崛起,传统的SQL关系数据库开始面临性能瓶颈,无法有效应对大规模数据处理和...

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

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

    NoSQL数据库PPT.pptx

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

    什么是NoSQL数据库?

    NoSQL数据库是近年来备受关注的一种非关系型数据库系统,其名称是"Not Only SQL"的缩写,强调在适当的情况下使用适合的数据存储方案,而不局限于传统的关系型数据库。NoSQL数据库的出现主要是为了应对关系型数据库在...

    mongodb 4.0 客户端工具nosqlbooster

    MongoDB 4.0 客户端工具NosqlBooster是一款专为MongoDB数据库设计的强大图形用户界面(GUI)工具,适用于管理和操作MongoDB数据库。NosqlBooster提供了直观的界面,使得对MongoDB的数据查询、编辑、管理变得更加便捷...

    nosql研发之路

    面对Tokyo Tyrant的稳定性风险和功能限制,开发团队决定自主研发NoSQL存储解决方案——INetDB。INetDB不仅兼容Memcached协议,支持主从复制和ttserver复制协议,还具备更高的性能和可靠性,在大数据量下表现尤为出色...

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

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

    nosql数据库解读.pptx

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

    NoSQLBooster for MongoDB

    NoSQLBooster for MongoDB是一款强大的管理工具,专为优化MongoDB操作而设计,其前身为Mongobooster,是开发人员和数据库管理员进行高效数据库管理和维护的理想选择。 NoSQLBooster提供了一系列功能,旨在提升...

    NoSQL数据库技术实战

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

    NoSQL数据库入门 高清PDF

    根据提供的信息,我们可以推断出该文档主要围绕“NoSQL数据库入门”这一主题展开,并且它是一本高清PDF格式的学习指导书籍。尽管文档的部分内容似乎与Linux公社网站介绍有关,但我们的重点将放在提取与NoSQL数据库...

    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学习之路

    NoSQL 数据库是当前大数据时代的热门话题,NoSQL 数据库学习之路是 NoSQL 数据库的详细介绍,介绍了目前主流的 NoSQL 数据库实现原理,涵盖了 CAP 理论、 BASE 理论、一致性哈希、 Vector Clock、Gossip Protocol 等...

    NoSQL还是NoSQL?

    标题 "NoSQL还是NoSQL?" 引发了一个在数据库领域中常见的讨论——关系型数据库(SQL)与非关系型数据库(NoSQL)的选择。这两种技术都有其独特的优势和适用场景,理解它们的区别对于做出合适的技术决策至关重要。 ...

    NoSQL数据库技NoSQL最新技术发展趋势.pdf

    NoSQL数据库技术发展趋势 NoSQL数据库技术发展趋势是当前数据库技术发展的热点。近年来,NoSQL数据库技术获得了高速发展,许多企业和机构都在投入巨资来开发和应用NoSQL数据库技术。阿里云作为中国软件行业的领导者...

    山东大学 nosql期末复习笔记 nosql 期末复习

    【 NosQL 数据库详解】 NosQL(Not Only SQL)是一种非关系型数据库,它与传统的关系型数据库不同,强调水平扩展、高并发处理和大数据存储。在 NosQL 期末复习中,我们需要掌握的关键知识点包括数据库的类型、特性...

    NoSQL数据库原理课件-侯宾.zip

    【分布式数据库原理与NoSQL详解】 在当今大数据时代,传统的SQL关系型数据库已经无法满足海量数据的存储和处理需求,因此分布式数据库和NoSQL数据库应运而生。本课件将深入探讨分布式数据库的原理以及NoSQL数据库的...

    nosqlbooster-6.2.17.zip

    NosqlBooster是一款专为MongoDB设计的强大管理工具,它提供了类似SQL的查询界面,使得对MongoDB数据的操作更加直观和高效。在这个场景中,我们讨论的是 NosqlBooster 的6.2.17版本的压缩包。 NosqlBooster的核心...

Global site tag (gtag.js) - Google Analytics