前端之家收集整理的这篇文章主要介绍了
NoSQL,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
简介
Nosql(Nosql = Not Only sql ),意即反sql运动,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。Nosql的拥护者们提倡运用非关系型的数据存储,相对于目前铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
现今状况
现今的
计算机体系结构在数据存储方面要求具备庞大的水平扩展性①,而No
sql致力于改变这一现状。目前Google的 BigTable 和Amazon 的Dynamo使用的就是No
sql型
数据库。
No
sql项目的名字上看不出什么相同之处,但是,它们通常在某些方面相同:它们可以处理超大量的数据。
这场革命目前仍然需要等待。的确,No
sql对大型企业来说还不是主流,但是,一两年之后很可能就会变个样子。在No
sql运动的最新一次聚会中,来自世界各地的150人挤满了CBS Interactive的一间会议室。
分享他们如何推翻缓慢而昂贵的关系
数据库的暴政,怎样使用更有效和更便宜的
方法来管理数据。
“关系型
数据库给你强加了太多东西。它们要你强行
修改对象数据,以满足RDBMS (relational database management system,
关系型数据库管理系统)的需要,”在No
sql拥护者们看来,基于No
sql的替代方案“只是给你所需要的”。
1.水平扩展性(horizontal scalability)指能够连接多个软硬件的特性,这样可以将多个服务器从逻辑上看成一个实体。
我们为什么要使用NOsql非关系数据库?
随着互联网
web2.0网站的兴起,非关系型的
数据库现在成了一个极其热门的新领域,非关系
数据库产品的发展非常迅速。而传统的关系
数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,例如:
1、High performance - 对
数据库高并发读写的需求
web2.0网站要根据
用户个性化信息来实时
生成动态
页面和提供动态信息,所以基本上无法使用
动态页面静态化技术,因此
数据库并发
负载非常高,往往要达到每秒上万次读写请求。关系
数据库应付上万次
SQL查询还勉强顶得住,但是应付上万次
sql写数据请求,硬盘IO就已经无法承受了。其实对于普通的BBS网站,往往也存在对高并发写请求的需求。
2、Huge Storage - 对海量数据的高效率存储和访问的需求
对于大型的SNS网站,每天
用户产生海量的
用户动态,以国外的Friend
Feed为例,一个月就达到了2.5亿条
用户动态,对于关系
数据库来说,在一张2.5亿条记录的表里面进行
SQL查询,效率是极其低下乃至不可忍受的。再例如大型web网站的
用户登录系统,例如腾讯,盛大,动辄数以亿计的帐号,关系
数据库也很难应付。
3、High Scalability && High Availability- 对
数据库的高可扩展性和高可用性的需求
在基于web的架构当中,
数据库是最难进行横向扩展的,当一个应用系统的
用户量和访问量与日俱增的时候,你的
数据库却没有办法像web server和app server那样简单的通过
添加更多的硬件和服务节点来扩展
性能和
负载能力。对于很多需要提供24小时不间断服务的网站来说,对
数据库系统进行
升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移,为什么
数据库不能通过不断的
添加服务器节点来实现扩展呢?
在上面提到的“三高”需求面前,关系
数据库遇到了难以克服的障碍,而对于web2.0网站来说,关系
数据库的很多主要特性却往往无用武之地,例如:
1、
数据库事务一致性需求
很多web
实时系统并不要求严格的
数据库事务,对读一致性的要求很低,有些场合对写一致性要求也不高。因此
数据库事务管理成了
数据库高
负载下一个沉重的负担。
2、
数据库的写实时性和读实时性需求
对关系
数据库来说,插入一条数据之后立刻
查询,是肯定可以读出来这条数据的,但是对于很多web应用来说,并不要求这么高的实时性。
3、对复杂的
SQL查询,特别是多表关联
查询的需求
任何大数据量的web系统,都非常忌讳多个大表的关联
查询,以及复杂的数据分析类型的复杂
sql报表
查询,特别是SNS类型的网站,从需求以及产品设计角度,就避免了这种情况的产生。往往更多的只是单表的主键
查询,以及单表的简单条件
分页查询,
sql的
功能被极大的弱化了。
因此,关系
数据库在这些越来越多的应用场景下显得不那么合适了,为了
解决这类问题的非关系
数据库应运而生。
No
sql 是非关系型数据存储的广义定义。它打破了长久以来关系型
数据库与ACID理论
大一统的局面。No
sql 数据存储不需要固定的表结构,通常也不存在连接操作。在大数据存取上具备关系型
数据库无法比拟的
性能优势。该术语在 2009 年初得到了广泛认同。
当今的应用体系结构需要数据存储在横向伸缩性上能够满足需求。而 No
sql 存储就是为了实现这个需求。Google 的BigTable与Amazon的Dynamo是非常成功的商业 No
sql 实现。一些开源的 No
sql 体系,如Facebook 的Cassandra, Apache 的HBase,也得到了广泛认同。从这些No
sql项目的名字上看不出什么相同之处:Hadoop、Voldemort、Dynomite,还有其它很多。
关系型
数据库中的表都是存储一些格式化的数据结构,每个元组字段的组成都一样,即使不是每个元组都需要所有的字段,但
数据库会为每个元组分配所有的字段,这样的结构可以便于表与表之间进行连接等操作,但从另一个角度来说它也是关系型
数据库性能瓶颈的一个因素。而非关系型
数据库以键值对存储,它的结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要
增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。
特点
它们可以处理超大量的数据。
它们运行在便宜的PC服务器集群上。
PC集群扩充起来非常方便并且成本很低,避免了“sharding”操作的复杂性和成本。
它们击碎了性能瓶颈。
No
sql的
支持者称,通过No
sql架构可以省去将Web或Java应用和数据转换成
sql友好格式的时间,执行速度变得更快。
“
sql并非适用于所有的程序
代码,” 对于那些繁重的重复操作的数据,
sql值得花钱。但是当
数据库结构非常简单时,
sql可能没有太大用处。
没有过多的操作。
虽然No
sql的
支持者也承认关系
数据库提供了无可比拟的
功能集合,而且在数据完整性上也发挥绝对稳定,他们同时也表示,企业的具体需求可能没有那么多。
Bootstrap支持
因为No
sql项目都是开源的,因此它们缺乏供应商提供的正式
支持。这一点它们与大多数开源项目一样,不得不从社区中寻求
支持。
缺点
但是一些人承认,没有正式的官方
支持,万一出了差错会是可怕的,至少很多管理人员是这样看。 “我们确实需要做一些说服工作,但基本在他们看到我们的第一个原型运行良好之后,我们就能够说服他们,这是条正确的道路。”