NoSQL⾮关系型数据库
NoSQL,指的是⾮关系型的数据库。随着互联⽹⽹站的兴起,传统的关系数据库在应付web2.0⽹站,特别是超⼤规模和⾼并发的SNS类型的web2.0纯动态⽹站已经显得⼒不从⼼,暴露了很多难以克服的问题,⽽⾮关系型的数据库则由于其本⾝的特点得到了⾮常迅速的发展。简介
NoSQL,意即反SQL运动,是⼀项全新的数据库⾰命性运动,早期就有⼈提出,发展⾄2009年趋势越发⾼涨。NoSQL的拥护者们提倡运⽤⾮关系型的数据存储,相对于⽬前铺天盖地的运⽤,这⼀概念⽆疑是⼀种全新的思维的注⼊。
现今状况
现今的在数据存储⽅⾯要求具备庞⼤的⽔平扩展性①,⽽NoSQL致⼒于改变这⼀现状。⽬前Google的 BigTable 和Amazon 的Dynamo使⽤的就是NoSQL型数据库。
NoSQL项⽬的名字上看不出什么相同之处,但是,它们通常在某些⽅⾯相同:它们可以处理超⼤量的数据。
这场⾰命⽬前仍然需要等待。的确,NoSQL对⼤型企业来说还不是主流,但是,⼀两年之后很可能就会变个样⼦。在NoSQL运动的最新⼀次聚会中,来⾃世界各地的150⼈挤满了CBS Interactive的⼀间会议室。
分享他们如何推翻缓慢⽽昂贵的关系数据库的暴政,怎样使⽤更有效和更便宜的⽅法来管理数据。
“关系型数据库给你强加了太多东西。它们要你强⾏修改对象数据,以满⾜RDBMS (relational database management system,)的需要,”在NoSQL拥护者们看来,基于NoSQL的替代⽅案“只是给你所需要的”。
1.⽔平扩展性(horizontal scalability)指能够连接多个软硬件的特性,这样可以将多个服务器从逻辑上看成⼀个实体。
我们为什么要使⽤NOSQL⾮关系数据库?
随着互联⽹⽹站的兴起,⾮关系型的数据库现在成了⼀个极其热门的新领域,⾮关系数据库产品的发展⾮常迅速。⽽传统的关系数据库在应付web2.0⽹站,特别是超⼤规模和⾼并发的SNS类型的web2.0纯动态⽹站已经显得⼒不从⼼,暴露了很多难以克服的问题,例如:
1、High performance - 对数据库⾼并发读写的需求
web2.0⽹站要根据⽤户个性化信息来实时⽣成动态页⾯和提供动态信息,所以基本上⽆法使⽤技术,因此数据库并发负载⾮常⾼,往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经⽆法承受了。其实对于普通的BBS⽹站,往往也
存在对⾼并发写请求的需求。
2、Huge Storage - 对海量数据的⾼效率存储和访问的需求
对于⼤型的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应⽤来说,并不要求这么⾼的实时性。
3、对复杂的SQL查询,特别是多表关联查询的需求
任何⼤数据量的web系统,都⾮常忌讳多个⼤表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询,特别是SNS类型的⽹站,从需求以及产品设计⾓度,就避免了这种情况的产⽣。往往更多的只是单表的主键查询,以及单表的简单条件查询,SQL的功能被极⼤的弱化了。
因此,关系数据库在这些越来越多的应⽤场景下显得不那么合适了,为了解决这类问题的⾮关系数据库应运⽽⽣。
NoSQL 是⾮关系型数据存储的⼴义定义。它打破了长久以来关系型数据库与ACID理论的局⾯。NoSQL 数据存储不需要固定的表结构,通常也不存在连接操作。在⼤数据存取上具备关系型数据库⽆法⽐拟的性能优势。该术语在 2009 年初得到了⼴泛认同。
当今的应⽤体系结构需要数据存储在横向伸缩性上能够满⾜需求。⽽ NoSQL 存储就是为了实现这个需求。Google 的BigTable与Amazon的Dynamo是⾮常成功的商业 NoSQL 实现。⼀些开源的 NoSQL 体系,如Facebook 的Cassandra, Apache 的HBase,也得到了⼴泛认同。从这些NoSQL项⽬的名字上看不出什么相同之处:Hadoop、Voldemort、Dynomite,还有其它很多。
特点
它们可以处理超⼤量的数据。
它们可以处理超⼤量的数据
它们运⾏在便宜的PC服务器集上
服务器集上。
PC集扩充起来⾮常⽅便并且成本很低,避免了“sharding”操作的复杂性和成本。
它们击碎了性能瓶颈。
它们击碎了性能瓶颈
NoSQL的⽀持者称,通过NoSQL架构可以省去将Web或Java应⽤和数据转换成SQL友好格式的时间,执⾏速度变得更快。
“SQL并⾮适⽤于所有的程序代码,” 对于那些繁重的重复操作的数据,SQL值得花钱。但是当数据库结构⾮常简单时,SQL可能没有太⼤⽤处。
没有过多的操作。
没有过多的操作
虽然NoSQL的⽀持者也承认关系数据库提供了⽆可⽐拟的功能集合,⽽且在数据完整性上也发挥绝对稳定,他们同时也表⽰,企业的具体需求可能没有那么多。
Bootstrap⽀持
因为NoSQL项⽬都是开源的,因此它们缺乏供应商提供的正式⽀持。这⼀点它们与⼤多数开源项⽬⼀样,不得不从社区中寻求⽀持。
缺点
但是⼀些⼈承认,没有正式的官⽅⽀持,万⼀出了差错会是可怕的,⾄少很多管理⼈员是这样看。
“我们确实需要做⼀些说服⼯作,”,“但基本在他们看到我们的第⼀个原型运⾏良好之后,我们就能够说服他们,这是条正确的道路。”NoSQL数据库开源软件
Membase
Membase 是 NoSQL 家族的⼀个新的重量级的成员。Membase是开源项⽬,源代码采⽤了Apache2.0的使⽤许可。该项⽬托管在GitHub.Source tarballs上,⽬前可以下载beta版本的Linux⼆进制包。该产品主要是由North Scale的memcached核⼼团队成员开发完成,其中还包括Zynga和NHN这两个主要贡献者的⼯程师,这两个组织都是很⼤的在线游戏和社区⽹络空间的供应商。
Membase容易安装、操作,可以从单节点⽅便的扩展到集,⽽且为memcached(有线协议的兼容性)实现了即插即⽤功能,在应⽤⽅⾯为开发者和经营者提供了⼀个⽐较低的门槛。做为缓存解决⽅案,Memcached已经在不同类型的领域(特别是⼤容量的Web应⽤)有了⼴泛的使⽤,其中 Memcached的部分基础代码被直接应⽤到了Membase服务器的前端。
通过兼容多种编程语⾔和框架,Membase具备了很好的复⽤性。在安装和配置⽅⾯,Membase提供了有效的图形化界⾯和编程接⼝,包括可配置的告警信息。
Membase的⽬标是提供对外的线性扩展能⼒,包括为了增加集容量,可以针对统⼀的节点进⾏复制。另外,对存储的数据进⾏再分配仍然是必要的。
这⽅⾯的⼀个有趣的特性是NoSQL解决⽅案所承诺的可预测的性能,类准确性的延迟和吞吐量。通过如下⽅式可以获得上⾯提到的特性:◆⾃动将在线数据迁移到低延迟的存储介质的技术(内存,固态硬盘,磁盘)
◆可选的写操作⼀⼀异步,同步(基于复制,持久化)
◆反向通道再平衡[未来考虑⽀持]
◆多线程低锁争⽤
◆尽可能使⽤异步处理
◆⾃动实现重复数据删除
◆动态再平衡现有集
◆通过把数据复制到多个集单元和⽀持快速失败转移来提供系统的⾼可⽤性。
MongoDB
MongoDB是⼀个介于关系数据库和⾮关系数据库之间的产品,是⾮关系数据库当中功能最丰富,最像关
系数据库的。他⽀持的数据结构⾮
常松散,是类似json的bjson格式,因此可以存储⽐较复杂的数据类型。Mongo最⼤的特点是他⽀持的查询语⾔⾮常强⼤,其语法有点类似于⾯向对象的查询语⾔,⼏乎可以实现类似关系数据库单表查询的绝⼤部分功能,⽽且还⽀持对数据建⽴索引。它的特点是⾼性能、易部署、易使⽤,存储数据⾮常⽅便。
主要功能特性:
主要功能特性
◆⾯向集合存储,易存储对象类型的数据
“⾯向集合”(Collenction-Orented),意思是数据被分组存储在数据集中,被称为⼀个集合(Collenction)。每个集合在数据库中都有⼀个唯⼀的标识名,并且可以包含⽆限数⽬的⽂档。集合的概念类似关系型数据库(RDBMS)⾥的表(table),不同的是它不需要定义任何模式(schema)。
◆模式⾃由
模式⾃由(schema-free),意味着对于存储在mongodb数据库中的⽂件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的⽂件存储在同⼀个数据库⾥。
◆⽀持动态查询
◆⽀持完全索引,包含内部对象
sql数据库迁移另一个硬盘◆⽀持查询
◆⽀持复制和故障恢复
◆使⽤⾼效的⼆进制数据存储,包括⼤型对象(如视频等)
◆⾃动处理碎⽚,以⽀持云计算层次的扩展性
◆⽀持RUBY,PYTHON,JAVA,C++,PHP等多种语⾔
◆⽂件存储格式为BSON(⼀种JSON的扩展)
BSON(Binary Serialized dOcument Format)存储形式是指:存储在集合中的⽂档,被存储为键-值对的形式。键⽤于唯⼀标识⼀个⽂档,为字符串类型,⽽值则可以是各中复杂的⽂件类型。
◆可通过⽹络访问
MongoDB服务端可运⾏在Linux、Windows或OS X平台,⽀持32位和64位应⽤,默认端⼝为27017。推荐运⾏在64位平台,因为MongoDB 在32位模式运⾏时⽀持的最⼤⽂件尺⼨为2GB。
MongoDB把数据存储在⽂件中(默认路径为:/data/db),为提⾼效率使⽤内存映射⽂件进⾏管理。
Hypertable
Hypertable是⼀个开源、⾼性能、可伸缩的数据库,它采⽤与Google的Bigtable相似的模型。在过去数年中,Google为在PC集上运⾏的可伸缩计算基础设施设计建造了三个关键部分。第⼀个关键的基础设施是Google File System(GFS),这是⼀个⾼可⽤的⽂件系统,提供了⼀个全局的命名空间。它通过跨机器(和跨机架)的⽂件数据复制来达到⾼可⽤性,并因此免受传统⽂件存储系统⽆法避免的许多失败的影响,⽐如电源、内存和⽹络端⼝等失败。第⼆个基础设施是名为Map-Reduce的计算框架,它与GFS紧密协作,帮助处理收集到的海量数据。第三个基础设施是Bigtable,它是传统数据库的替代。Bigtable让你可以通过⼀些主键来组织海量数据,并实现⾼效的查询。Hypertable是Bigtable的⼀个开源实现,并且根据我们的想法进⾏了⼀些改进。
Apache Cassandra
Apache Cassandra是⼀套开源分布式Key-Value存储系统。它最初由Facebook开发,⽤于储存特别⼤的数据。Facebook⽬前在使⽤此系统。
主要特性:
主要特性
◆分布式
◆基于column的结构化
◆⾼伸展性
Cassandra的主要特点就是它不是⼀个数据库,⽽是由⼀堆数据库节点共同构成的⼀个分布式⽹络服务,对Cassandra 的⼀个写操作,会被复制到其他节点上去,对Cassandra的读操作,也会被路由到某个节点上⾯去读取。对于⼀个Cassandra集来说,扩展性能是⽐较简单的事情,只管在集⾥⾯添加节点就可以了。
Cassandra是⼀个混合型的⾮关系的数据库,类似于Google的BigTable。其主要功能⽐ Dynomite(分布式的Key-Value存储系统)更丰富,但⽀持度却不如⽂档存储MongoDB(介于关系数据库和⾮关系数据库之间的开源产品,是⾮关系数据库当中功能最丰富,最像关系数据库的。⽀持的数据结构⾮常松散,是类似json的bjson格式,因此可以存储⽐较复杂的数据类型。)Cassandra最初由Facebook开发,后转变成了开源项⽬。它是⼀个⽹络社交云计算⽅⾯理想的数据库。以Amazon专有的完全分布式的Dynamo
为基础,结合了Google BigTable
基于列族(Column Family)的数据模型。P2P去中⼼化的存储。很多⽅⾯都可以称之为Dynamo 2.0。
和其他数据库⽐较,其突出特点是:
◆模式灵活:使⽤Cassandra,像⽂档存储,你不必提前解决记录中的字段。你可以在系统运⾏时随意的添加或移除字段。这是⼀个惊⼈的效率提升,特别是在⼤型部署上。
◆真正的可扩展性:Cassandra是纯粹意义上的⽔平扩展。为给集添加更多容量,可以指向另⼀台电脑。你不必重启任何进程,改变应⽤查询,或⼿动迁移任何数据。
◆多数据中⼼识别:你可以调整你的节点布局来避免某⼀个数据中⼼起⽕,⼀个备⽤的数据中⼼将⾄少有每条记录的完全复制。
◆范围查询:如果你不喜欢全部的键值查询,则可以设置键的范围来查询。
◆列表数据结构:在混合模式可以将超级列添加到5维。对于每个⽤户的索引,这是⾮常⽅便的。
◆分布式写操作:有可以在任何地⽅任何时间集中读或写任何数据。并且不会有任何单点失败。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。