【大话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,谢谢关注。

时间: 2024-10-14 10:56:12

【大话NoSQL】——什么是NoSQL?的相关文章

NoSQL生态系统(nosql ecosystem)

Unlike most of the other projects in this book, NoSQL is not a tool, but an ecosystem composed of several complimentary and competing tools. The tools branded with the NoSQL monicker provide an alternative to SQL-based relational database systems for

初识NoSQL 快速认识NoSQL数据库 分析Analytics For Hackers: How To Think About Event Data

做了一年的大一年度项目了,对于关系型数据库结构还是有些了解了,有的时候还是觉得这种二维表不是很顺手.在看过一篇文章之后,对NoSQL有了初步的了解,(https://keen.io/blog/53958349217/analytics-for-hackers-how-to-think-about-event-data).这边文章写的很好,确实写出来了在实际情况下NoSQL的“用武之地”,而且用了MineCraft作分析,但是也许不够全面.比如文章中只是提到了,entity数据用关系型怎么存,ev

NoSQL简介(NoSQL Distilled读书笔记)

随着NoSQL的流行,了解这种新型数据库十分有必要. 首先,为什么我们要选择NoSQL? 主要是两个原因:一是待处理的数据量很大,或对数据访问的效率要求很高,从而必须将数据放在集群上:二是想采用一种更为方便的数据交互方式来提高应用程序开发效率 而传统关系数据库最大的问题,应该就是阻抗失谐 第二,NoSQL数据库的共同特性是什么? 不使用关系模型:在集群中运行良好:开源:适用于21世纪的互联网公司:无模式 第三,NoSQL数据模型: 模型主要可以分为四类:‘键值’ ‘文档’ ‘列族’ ‘图’ 前三

大话NoSql

之前看过一本名叫<<大数据挑战的书>>,里面主要讲了NOSQL的内容,感觉讲得确实不错,今天来重新温习一下,我们大话NOSQL.说道NOSQL,我们肯定联想到的内容就是BigData大数据了,不错,当今的时代就是大数据的时代了.如果放在前几年,互联网还没有这么发达的情况下,也许谁也不会听过这个名词.在讲正题的时候,我做了张图来看看一般服务端架构在面对业务发展的需要时候,一般的演变趋势: 所以如果公司的数据量发展到一定规模的话,可以采用NoSql.好了终于引出了NoSql这个今天的主

云计算背后的秘密:NoSQL诞生的原因和优缺点

转载收藏一篇对nosql讲解的比较全面的文章:http://blog.csdn.net/xlgen157387/article/details/47908797 这篇文章将和大家聊聊为什么NoSQL会在关系型数据库已经非常普及的情况下异军突起? 诞生的原因 随着互联网的不断发展,各种类型的应用层出不穷,所以导致在这个云计算的时代,对技术提出了更多的需求,主要体现在下面这四个方面: 1. 低延迟的读写速度:应用快速地反应能极大地提升用户的满意度; 2. 支撑海量的数据和流量:对于搜索这样大型应用而

十种NoSQL数据库以及对比

 虽然NoSQL流行语火起来才短短一年的时间,但是不可否认,现在已经开始了第二代运动.尽管早期的堆栈代码只能算是一种实验,然而现在的系统已经更加的成熟.稳定.不过现在也面临着一个严酷的事实:技术越来越成熟--以至于原来很好的NoSQL数据存储不得不进行重写,也有少数人认为这就是所谓的2.0版本.这里列出一些比较知名的工具,可以为大数据建立快速.可扩展的存储库. 1. Casssandra Cassandra最初由Facebook开发,后来成了Apache开源项目,它是一个网络社交云计算方面理

关系数据库&amp;&amp;NoSQL数据库

在过去,我们只需要学习和使用一种数据库技术,就能做几乎所有的数据库应用开发.因为成熟稳定的关系数据库产品并不是很多,而供你选择的免费版本就更加少了,所以互联网领域基本上都选择了免费的MySQL数据库.在高速发展的WEB2.0时代,我们发现关系数据库在性能.扩展性.数据的快速备份和恢复.满足需求的易用性上并不总是能很好的满足我们的需要,我们越来越趋向于根据业务场景选择合适的数据库,以及进行多种数据库的融合运用. 当我们在讨论是否要使用NoSQL的时候,你还需要理解NoSQL也是分很多种类的,在No

NoSQL 简介

关系型数据库概述: 优点:使用简单:功能强大:高稳定性: 缺点:需求变动导致分库分表难维护:要改系统数据访问层代码:Master易导致单点故障:存储记录量有限:扩展能力有限:SQL查询大数据效率低 传统关系型数据库无法满足Web2.0的需求,非关系型数据库NoSQL出现了 NoSQL优点:高并发读写性:高容量和高效存储需求:高扩展性和高可用性 NoSQL(Not Only  SQL)概述: 易扩展,灵活的数据模型,大数量,高性能 按照数据模型存储性质,可将NoSQL分为: 键值存储.面向表.面向

一网打尽当下NoSQL类型、适用场景及使用公司

在过去几年,关系型数据库一直是数据持久化的唯一选择,数据工作者考虑的也只是在这些传统数据库中做筛选,比如SQL Server.Oracle或者是MySQL.甚至是做一些默认的选择,比如使用.NET的一般会选择SQL Server:使用Java的可能会偏向Oracle,Ruby是MySQL,Python则是PostgreSQL或MySQL等等. 原因很简单:过去很长一段时间内,关系数据库的健壮性已经在多数应用程序中得到证实.我们可以使用这些传统数据库良好的控制并发操作.事务等等.然而如果传统的关系

第五十一课 NoSQL基础概念及MongoDB应用、数据库分配概念

NoSQL基础概念及MongoDB MongoDB基础应用 MongoDB索引及复制集 数据库分片的概念及Mongodb  sharding的实现 一.NoSQL基础概念 NoSQL(Not Only SQL),是一种技术流派,非关系型数据库:适合用在大数据领域,各种nosql有各自的查询语句,这也是nosql的缺点之一. 大数据(BigDate)也称海量数据是一个模糊的概念,像Google.百度收集大量数据,分析现在.预测未来:这些数据通过某些特定的特征和算法得出某些预测的结果,这些数据为大数