数据库技术发展与非关系型数据库NoSQL
近几年来,NoSQL运动如火如荼,不断有业内的巨头加入阵营,发布和推广NoSQL的相关产品,开拓应用场景。传统关系型数据库软件厂商也不甘寂寞,新产品、新版本、新特性不断发布,新官司、新收购也频频爆出,即使一向沉静的数据库市场,也被震出了几丝波澜。
就让我们一起来回顾近两年间数据库市场的风云变幻和起伏跌宕,并展望未来几年,数据库市场及相关领域的发展吧。
ORACLE依然拉风
进入2011年,ORACLE继续拉风的强势,据Gartner近期发布的调查报告显示,在RDBMS市场,Oracle的市场份额已经占到48.1%,仍然位居第一位,其市场份额超过了之后的五个竞争对手的总和。
近些年来,ORACLE在资本层面频频发起重量级的并购,先后收购了PeopleSoft、BEA、SUN等知名软件企业,极大增强了自家整体实力。产品线上也是四面出击,现如今的ORACLE早已由一个单纯的数据库软件厂商,蜕变成产品集合涵盖了包括数据库、中间件、操作系统、企业化管理、商业智能、虚拟机、开发工具等,从软件到硬件,可对外提供完整企业解决方案的巨无霸厂商,完成从卖产品到卖服务的重大角色转变。
ORACLE的产品线漫长且数量众多,进入2011年,在笔者看来,下列产品值得着重描述,这些产品未来的发展,也有可能会对整个市场产生重大影响。
1) Exadata
2008年的OOW大会上,ORACLE与HP合作推出了具备划时代意义的数据库一体机Exadata,专攻OLAP市场,该款产品的硬件由HP提供,ORACLE则提供软件支持。完成对SUN的收购后,ORACLE变相拥有了自己的硬件产品 - 来自SUN的硬件系统。
经过资源的整合,ORACLE迅速推出了Exadata V2,硬件方面改用SUN的X86架构产品现在是自家的产品了,数据库系统则升级到最新版本的11gR2,相比上一代产品,Exadata V2变化巨大。
首先是硬件方面的变化,虽说V2的整体架构相比一代产品没有大的改变,不过一方面数据库服务器的主机换成了SUN的硬件,配置有所增强,另外每台Storage Cell更是配置了384Gb的Flash Cache。在软件设计方面,Exadata首次引入了HCC特性(Hybrid Columnar Compression),中文直译的话应该叫做混合列压缩,这是在传统的行存储方式和数据仓库系统中常被应用的列式存储混合应用的一种变通方式,HCC相当于是在Block和Extend之间又引入了一级存储关系,定义为压缩单元(Compress Unix,CU),在一个CU内按照列的方式存储,而每个CU与CU则按照基本行的方式保存,相当于综合了列式存储高压缩比和行式访问的特点。
除此之外,Exadata还有一些Smart的技术,比如说V1中就被引入的Smart Scan技术,以及新增的Storage Index技术等,想必ORACLE也是希望籍着这些"Smart"的技术来表明,Exadata并非仅只是一个配置强豪华的黑匣子。
根据ORACLE此前发布的消息称,全球已经部署超过1000台的Exadata,用户遍及67个国家的23个行业,如果按照Exadata高昂的报价来计算,Exadata已经有了不小的收获。而且自Exadata V1发布至今,经过三年的市场培育以及这么长时间的实际检验,是否可以说,Exadata确实经受住了考验。
2) GoldenGate
即便已经拥有如高级复制、Streams等数据同步特性,ORACLE仍然于2009年收购了第三方专业数据集成公司GoldenGate,这项收购再一次充分体现出ORACLE公司的战略思维。在收购消息爆出之后,有些评论文章对于ORACLE公司是否能够有效整合已有的数据集成产品存有疑虑,其实,这种论断多半是由于不了解ORACLE公司产品特点。
事实上,在被ORACLE公司收购之前,GoldenGate就已在全球拥有数百家客户,其中不乏顶尖的金融及电信企业。由于具有跨平台、异构数据库的特点,GoldenGate的应用场景要广泛的多,包括数据库同步/高可用和容灾/应急备份/数据抽取/双业务中心/实时报表查询等场景均能适用。特别是在异构数据库、跨平台支持等场景下,使用GoldenGate更是具有先天优势,GoldenGate捕获到的Change Data是保存在独立的文件中,这就使得其具有跨平台、跨版本及DB无关性的特点。
GoldenGate目前最新版本v11.1,能够运行在包括Windows2000/2003/2008/XP、Linux、Sun Solaris、HP-UX/HP TRU64、IBM AIX、IBM z/OS等几乎所有的主流操作系统下,对于主流的DB2、Sybase、MS SQL Server、MySQL等数据库产品均有对应版本,内存数据库TimesTen及数据仓库Teradata也能被支持,尤其对于自家的ORACLE数据库,从8i到11gR2各个版本均能支持。
GoldenGate V11在增强功能和扩大平台支持的前提下,数据处理的性能也非常优秀,同时也支持在Standby系统中实现数据抽取,从而将对源端的影响降到最低,数据的转换、复制都非常快,可以实现关键系统的实时数据集成。通过GoldenGate的异构特点,使其拥有将ORACLE数据库和非ORACLE数据库统统纳入到同一个平台的能力,而在这之上仍然是由ORACLE的应用产品在支撑和管理整个企业的数据。
3) MySQL
2008年先是MySQL被SUN收购,到了2009年ORACLE又收购了SUN,这真是一波未平一波又起。在Oracle宣布对SUN的收购之后,很多业内人士对于MySQL的前景比较悲观,甚至有评论文章称Oracle可能放弃MySQL,而ORACLE对此则守口如瓶毫无表态,直到2010年的JavaOne大会,Oracle的首席架构师Edward Screven在大会上公开表态称:Oracle不会放弃MySQL,相反,还会更加努力的让MySQL变的更好。
不过,事实情况是,相当长一段时间里MySQL数据库几乎都处于停滞发展的情况。在Sun收购MySQL后,MySQL就面临着市场竞争力减弱的问题(倒是便宜了PostgreSQL),很多用户担心MySQL可能沦为商业性盈利的产品。
易主于ORACLE之后,MySQL相关的产品计划也一直没有清晰的定位,小版本的更新大多都是些小打小闹。直到2011年初,MySQL重大升级,对外发布了MySQL5.5正式版,虽说从主要增加的功能上来看并无重量级特性,至于其着力宣扬的两处重大改动:修改InnoDB做为默认存储引擎和提供Replication的半同步机制,前者在实际应用场景中早已成为事实上的标准设置,而后者,象征意义更加明显。
出于市场竞争的需要,ORACLE必须支持MySQL,其本身也确实具备支持MySQL发展的资源。如果MySQL停滞不前或被废弃,只会让新的开源数据库崛起,这对ORACLE的整个战略更加不利,对于这些因素,ORACLE想必都有清楚的认识。经过前面一年的沉寂,MySQL也再次回归快速发展的轨道,在MySQL5.5正式版推出后不久,MySQL5.6 RC社区版也在官网发布,并且明确了开发目标和方向,这些消息不管是对最终用户还是DBA都属利好消息。
同时,ORACLE也在加紧MySQL企业版和Oracle其他系列产品的整合。据悉在2011年,MySQL的企业版本将会于Oracle的 EnterpriseManager及审计工具、安全备份等产品进行整合,其中有些已经在Oracle的计划蓝图中了。
IBM继续“破甲”
在企业级RDBMS领域,IBM的DB2被公认为是ORACLE数据库的最大对手,两大厂商之间也是恩怨纠葛。ORACLE公司的CEO Larry Ellison多次将Oracle的产品与IBM相对比,公开叫板IBM,甚至用悬赏千万美元奖金的方式,用自家产品挑战IBM DB2的数据库性能。
面对挑战,IBM这个一向内敛的企业也酝酿着反击,并于2010年初展开了针对意味十足的“破甲行动”。整个“破甲行动”的核心,其实是以TCO(Total Cost of Ownership,总体拥有成本)做为攻击的重心。由于ORACLE采取的价格策略中维护费用很高,对于客户的咨询回复速度不够及时,IBM则针对性地鼓励并帮助用户移植到DB2数据库平台,提升用户TCO的整体方案。并加强与SAP等其它厂商的合作,进一步提升DB2数据库中在SAP应用软件的性能。
在数据库软件方面,IBM也在加紧提升软件功能,DB2推出的pureScale技术,在不付出较大性能做为代价的前提下,具备横向扩展的能力,帮助企业实现“向外扩展”的数据库集群,并具有高可用性、应用程序透明等多项特征,被认为是用来挑战ORACLE公司的RAC技术。另一方面,则是着重提高兼容性,按照IBM的说法,目前向DB2移植的成本和风险已经大大降低,DB2 从V9.7版本开始增加对Oracle数据库语法的支持,据称能够实现97%的应用程序与Oracle兼容,对于剩下的3%的兼容性问题,将通过IBM CDL新成立的由40位资深工程师组成的移植中心,帮助用户实现平滑移植。
Microsoft在发力
尽管是与ORACLE、IBM这样的老牌关系型数据库软件厂商同台竞技,但Microsoft公司的SQL Server表现不弱,并有逐年增强之势。根据RZ Research最新研究报告表明,在全球数据库领域,Microsoft的SQL Server占有率遥遥领先居于首位,这主要是得益于SQL Server优秀的操控体验,易用的管理功能。不过如果细分市场的话,SQL Server一直是在中小企业市场占据较大比重,这也与SQL Server一直深植Windows平台有重大关系,这部分市场竞争激烈,并且持续受到像MySQL这类开源数据库的挤压。
先抢占市场,再丰富功能,Microsoft公司的市场路线,一度被人形容为“农村包围城市”。这些年来,MS SQL SERVER一直在发力追赶,从云计算到虚拟化技术,再到自助商业智能工具等。
2010年4月,Microsoft公司推出了SQL Server 2008 R2,着重在商业智能、可扩展性和平台集成性方面做了进一步增强,在客户端支持方面SQL Server更是有天然优势,包括ADO、OLE DB、DAO、ODBC和新加入的ADO.NET、Native Client支持等,在前台开发工具中,则与Visual Studio天衣无缝的结合,甚至C#可以在SQL Server中进行开发,国际化、本地化支持方面也非常完备,所提供的丰富功能赢得了开发者的高度认同,以至于被人称为开发者版本。
2010年11月份,Microsoft在SQL Server专家大会(PASS)上发布了代号Denali的下一个版本,在延续了该软件的一贯风格的同时,继续针对各种IT人员开发出各式各样的全新特性。
根据已经公布的消息,在SQL Server 2011中新增功能包括:
● 列式存储,提供了更高的压缩比,并大幅降低查询检索时扫描的页面数量;
● 引入AlwaysOn技术,可视作是数据库镜像与集群的结合体,具体的实现方式是将一组数据库定义为一个可用性单元,以此来提供跨数据库对象引用的高可用体验;
● 增强数据可视化功能,SQL Server提供了一个新的基于Web的报表设置器,使用Silverlight框架,通过简单易用的展示工具和强大的可视化组件的配合,即可向终端用户提供报表,极大简化了传统的BI模型创建方式。
Sybase持续边缘
做为全球第四大数据库厂商,Sybase在规模上其实已经远逊于前三名,即使是Sybase旗下的关系型数据库管理系统主打品牌ASE,现如今还有多少人记得它曾经的名字:Sql Server呢。该系统是由Sybase当年联合微软及Ashton-Tate共同进行开发,Sybase身为代码的拥有者,对于SqlServer这个名字来说应该更加关系密切,然后,时过境迁,随着市场份额的逐年下降,影响力也日趋弱化,到最后为了能够与MicroSoft Sql Server有所区分,以至于连Sql Server的名字都主动放弃了,于是才有了现如今的ASE。
Sybase ASE(Adaptive Server Enterprise)目前已经发展到了15.5版了,新版本自然也带来了数项新特性,包括推出了对内存数据库的支持,ASE 15.5的内存数据库有两种类型:完全内存数据库(没有磁盘驻留)和松缓持久化数据库(作为内存数据库,被可用内存的限制时,以及在合理关闭时可被持久化),可以应对不同的场景;最新版本的ASE 15.5也完全能够支持Adaptive Server备份服务器并集成TSM(IBM Tivoli Storage Manager),相信会使得备份对象的管理更加便利;此外,最新版本还支持用户创建其他的Tempdb组;支持用户自定义存储过程的延迟命令;提供了新的压缩算法,可用于数据库压缩备份,相当该项算法引进会使得内存和CPU消耗方面更加高效。
在级数据仓库解决方案方面,Sybase拥有企业级数据仓库分析软件Sybase IQ,就在本月7号,Sybase宣布其基于新一代全共享的大规模并行处理(MPP)技术的Sybase IQ 15.3将全面上市,新版本提供常用和新型编程语言版本的API,以及为软件开发人员简化整合过程的Web Services接口,进一步强化Sybase IQ将业务分析集成到应用程序和业务流程的能力。
在移动数据库领域,Sybase处于绝对领先的地位,其ASA(SQL Anywhere)拥有半数以上的市场份额,2010年7月,SAP公司出价58亿美元完成了对Sybase的收购,当时就有不少业内人士认为SAP收购Sybase意在潜力巨大的移动信息化市场。
通过将 SAP 企业级应用软件产品组合和 Sybase的数据库、移动应用产品等技术的优势互补,SAP 能够提供一个完整且优化的高效业务分析基础架构。
不过,由于Sybase在全球数据库领域市场份额已经极为弱化尤其相较ORACLE数据库而言,而SAP的很多客户却均使用ORACLE数据库作为数据支撑,SAP公司面对这种窘境,在平台整合期恐怕异常痛苦,其次,完成对Sybase的收购后,SAP已经涉入IBM等合作的核心业务领域,未来面临直接竞争恐怕避无可避,这在相当程度上也会对SAP公司与其它厂商的合作关系及未来业务埋下隐患。
NoSQL愈发兴旺
曾几何时,应用开发就是写个客户端或者网页,后端程序向数据库中的表对象执行增删改查,这一模式延续了数十年,直到现在仍然有相当多的应用基于这种模式。不过,随着数据量的爆炸式膨胀,特别是互联网应用,对高并发的数据存取性能要求越来越高,对海量数据和访问和数据存储的横向扩展需求欲发迫切,传统模式在应对新形式下新需求时,频繁地暴露出很多不足。
2009年,一场“NoSQL”运动的兴起,让很多人激动并积极投入了力量。所谓“NoSQL”运动,通常所指的是非“关系型数据库”应用,国外的互联网巨头早把精力投入到了NoSQL产品的研发并广泛应用,国内众多门户及新兴的WEB2.0网站也在利用各种开源NoSQL技术来解决实际问题。
但是,就目前来看,没有什么技术比“NoSQL”更加混乱,想要在这个领域紧跟潮流非常困难,新的项目和技术层出不穷,即使是NoSQL阵营内部,也在彼此交锋不断,不过这一点也从侧面说明了NoSQL产品的热度和活力,以下列举几类NoSQL应用场景和流行的产品:
● 用于列式存储及分布式计算的有Hadoop项目中的Hbase(Google BigTable的开源项目),FaceBook的Cassandra,GreenPlum,来自Yahoo的PNUTS等;
● 用于文档存储类的包括CouchDB、MongoDB等;
● 用于高可用读写的Key Value方案更是不胜枚举,包括MemcacheDB、Tokyo Cabinet/Tyrant、Redis、LightCloud、BeansDB等等。
NoSQL运动虽然如火如荼,但对于很多最终用户来说,NoSQL方案的应用仍不是做为主要存储方式,很多场景下还是将其做为一种优化的技术手段在应用。这种方式倒并非不可取,不过,其所依托的基础数据来源,仍然是传统RDBMS产品。
之前有消息称Facebook、Digg、Twitter都宣布将淘汰既有的MySQL系统,改用Cassandra方案,不过后来Twitter又在一篇官方技术博客中提到会暂停使用 Cassandra 来代替 MySQL 存储 feed 的计划,究其原因说到底还是因为 Cassandra 仍然缺少大并发海量数据访问的案例及经验。同时也有NoSQL运动的先行者意图脱离这一阵营,比如CouchDB就宣传自己不再是NoSQL的一分子。综合来看,NoSQL产品弥补了关系型数据库在某些应用场景的不足,但是它也并非万能,仍然需要时间的检验,按照毛爷爷的话讲就是:前途是光明的,道路是曲折的。
向前看,趋势和方向
1) 互联网领域NoSQL应用成为主流
在互联网应用领域,特别是web2.0网站的一些常见需求,比如数据库高并发读写、海量数据的高效存取、高可用性及高扩展性架构等,传统RDBMS应对这些需求时异常的艰难,或者实现成本极为高昂。
NoSQL运动在2009年出现井喷,经过三年的蓬勃发展,发展出了众多不同应用场景的产品,其所拥有的高效海量数据处理能力、高并发存取和简便的横向扩展等特点,非常适合互联网应用。笔者认为,在互联网领域,未来大部分数据库市场有可能会被NoSQL产品占领。但是,有必要重申NoSQL的原意,并不是NO SQL,而是Not Only SQL,它并不是要取代目前广泛应用数十年的传统数据库,在一定程度上,它也会与传统RDBMS产品相配合。最终所采用的技术模型,关键还是取决于产品的各个模块,在可靠性/一致性与高性能之间的取舍了。
2) “云计算”正步入实质性阶段
中国古典名著“三国演义”的开篇有这样一句话:话说开下大势,分久必合、合久必分。从大的趋势上来说,数据库系统发展的这二三十年,也大致符合这一规律。
在上个世界的七八十年代,广泛的应用需求再加上产品的空白,促使市场产生了各类的数据库模型:层次型、网状型、关系型,并诞生了多家数据库系统软件厂商。到了上世纪的八九十年代,大型网络和计算环境的普及,又使得相关企业的需求趋同,最终造就了像ORACLE、DB2、Sybase这类的大型关系型数据库软件厂商。到了本世界初,随着互联网时代的到来,当下应用需求再次趋向多样化,多数企业更需要灵活、轻便,功能更切合自身需求的数据管理系统,而不是即大又全、价格还昂贵的通用系统。
对于数据库软件厂商来说,这即是挑战也是机遇,在当前数据库市场基本成熟,市场增速放缓的现状下,只有变化才能产生新的机会,NoSQL运动当下的兴起,又何尝不是因为暗合这种需求呢。
而随着互联网业务的迅猛发展,数据规模急剧的膨胀,与之对应的IT硬件更新速度完全无法与之相比,存储和管理海量数据已越来越成为亟待解决的问题,云计算的概念也是由此应运而生,在这方面,NoSQL所具有的高性能、高可用性、高扩展能力非常适合“云”的需求,也是目前“云数据”应用的主力。
尽管有观点认为,关系型数据库不合适用于云计算环境,但传统的RDBMS软件厂商并不甘于沉寂,都在加紧推出自己的应对方案,Oralce企业云基础架构解决方案将Oracle的Linux操作系统、虚拟化平台、ZFS存储设备和Sun刀片服务器硬件整合在一起,被设计用来与Oracle企业管理器协同工作,并且据称Oracle Database下一个版本,极有可能定义为12c(c即cloud)。蓝色巨人IBM也不落人落,推出的“蓝云”也是软硬件结合。Microsof虽然没有自己的硬件产品,不过由于其拥有全球最多的软件用户,影响力不能小视,有消息称在即将发布的代号“Denali”的新版SQL Server,将引入一个专为Visual Studio准备的开发工具,在企业与SQL Azure云端数据库之间,架起应用程序开发与部署的桥梁。Sybase IQ则宣称其主推的列式数据库更适合云计算时代的数据存储。亚马逊更是在今年2月份即已宣布,旗下的Relational Database Service服务于今年第二季度开始支持MySQL数据库。
云计算已经成为未来海量数据管理的重要方向,从成本和性能两方面考虑,会有越来越多的企业愿意把自己的数据中心转移到公有云或私有云。
3) 数据仓库领域大有可为
虽然在新兴互联网业务模式下,相比时下火热的NoSQL产品并不占优,但在数据仓库应用环境下,传统的关系型数据库仍占据着重要的市场,并且笔者认为在未来很长一段时间内,都仍将占据着主流的位置。
根据Gartner今年2月发布的最新报告表明,在数据仓库领域,数据库管理系统中ORACLE、IBM、Sybase(SAP)等都处于魔力象限的领导者象限,Microsoft公司的Sql Server处于挑战者象限,但纬度已经非常接近领导者象限的范围。
NoSQL阵营也有产品入围,并且表现出色,Greenplum(EMC)也处于领导者象限,但相比在互联网领域相同阵营产品的,在数据仓库领域中就显得比较孤单。
笔者认为这与厂商的投入有关系,ORACLE数据库做为关系数据库领域最强大的数据库软件,有完善的数据仓库解决方案,并且ORACLE公司于2007推出Exadata V1,在产品发布时就明确专用于OLAP,剑指竞争对手Teradata。随后推出的升级版本V2在增强配置及功能的前提下,将OLAP应用也囊括其中。据ORACLE自己发布的统计数据来看,硬是生生地从数据仓库领域的老牌领导者Teradata中抢占了不少市场。
而另一个巨头IBM则是即有DB2这样的关系型数据库软件,也有于2010年收购来的数据仓库与数据分析专业厂商Netezza,合力在数据仓库领域拼抢市场。Sybase做为首家推出基于列存储的关系型数据库软件,其主推产品Sybase IQ提供多个颇具特色的技术,包括Bit-Wish索引技术,预连接(PReJoin)策略,得益于列式存储所带来的数据压缩和并行处理的高效等等。
4) DBA变身架构师
关系型数据库仍然主流的时代,工程师们往往只需要专注于所使用的数据库产品的特性及相关维护工作上,但在现如今这样一个信息大爆炸的时代,生成海量数据的应用遍布四周,虽然同样还是面对数据,但不同的应用有各自不同的特点和需求,各种模型各种实现也纷纷兴起,越是大型的应用,越会面对复杂的存储层管理需求,工程师就需要有能力根据应用的特点,使用不同技术满足不同应用的需求。
有需要采用cache层处理的,有需要Key Value数据库支持的,有应用列式存储的,有支持海量文件的,也有管理重要数据的关系型数据库。如GoldenGate这类数据集成软件的应用,也会将产品中数据在不同平台流转的现象变的更为普遍。
软件越来越丰富,版本也不停在升级,功能不断在增强,智能化程度越来越高,技术产品确实越来越易用,工具也会越来越简便,但这个行业正变的越来越复杂,DBA必须做好从维护传统的单一平台系统到架构师的转变,储备更多的“食粮”应对新时代下的不同需求。
(责任编辑:中国统计网)
NoSQL
NoSQL,指的是非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。
简介
NoSQL(NoSQL = Not Only SQL ),意即反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网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数据库产品的发展非常迅速。而传统的关系数据库在应付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,还有其它很多。
NoSQL与关系型数据库设计理念比较
关系型数据库中的表都是存储一些格式化的数据结构,每个元组字段的组成都一样,即使不是每个元组都需要所有的字段,但数据库会为每个元组分配所有的字段,这样的结构可以便于表与表之间进行连接等操作,但从另一个角度来说它也是关系型数据库性能瓶颈的一个因素。而非关系型数据库以键值对存储,它的结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。
特点
它们可以处理超大量的数据。 它们运行在便宜的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数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。 ◆支持动态查询 ◆支持完全索引,包含内部对象 ◆支持查询 ◆支持复制和故障恢复 ◆使用高效的二进制数据存储,包括大型对象(如视频等) ◆自动处理碎片,以支持云计算层次的扩展性 ◆支持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维。对于每个用户的索引,这是非常方便的。 ◆ 分布式写操作:有可以在任何地方任何时间集中读或写任何数据。并且不会有任何单点失败。
扩展阅读:
- http://blog.csdn.net/DL88250/archive/2010/01/14/5191092.aspx
- http://www.loilee.com/archives/16
XML技术与数据库的发展趋势分析
数据库技术及其应用系统经历了从层次数据库、网状数据库到关系数据库以及面向对象数据库的发展,在传统的商业和事务处理领域内逐步成熟,取代了原有的基于文件系统的数据处理方式,成为计算机信息系统中的重要基础和支柱。但随着Internet的飞速发展,Web的出现改变了人们习惯的处理方式,也给数据库技术提出了必须面对的重要问题,即如何有效地存储和管理Web上的数据(文档),使其既能被高效地操作和维护,又能在Internet平台上方便地表示和交换。
XML技术自出现以来发展非常迅速,在许多领域内得到广泛的支持而有着广阔的应用前景。例如电子数据交换、电子商务等更是将XML作为一种基础性、支柱性的技术来看待。
1、数据库简史
数据库系统是随着计算机技术的不断发展,在特定的历史时期、特定的需求环境下出现的。在1946年的第一台计算机到20世纪60年代这漫长的20年里,计算机操作系统主要局限于文件的操作,对数据的管理也主要是通过文件系统来实现。进行计算所需要的各种数据存放在各自的文件里,使用这些数据时将文件打开,读取文件中的数据到内存中,当计算完毕后,将计算结果仍旧写入到文件中去,它的不足主要集中在无法对数据进行有效的统一管理。针对文件系统的重要缺点,人们逐步发展了以统一管理数据和共享数据为主要特征的系统,即数据库系统。1964年,美国通用电气公司开发成功了世界上的第一个数据库系统IDS(IntegratedDataStore)。IDS奠定了网状数据库的基础,并得到了广泛的发行和应用,成为数据库系统发展史上的一座丰碑。1969年,美国国际商用机器公司(IBM)也推出世界上第一个层次数据库系统IMS(InformationManagement System),同样在数据库系统发展史上占有重要的地位。
70年代初,E.F.Codd在总结前面的层次、网状数据库优缺点的基础上,提出了关系数据模型的概念及关系代数和关系演算。在70年代,关系数据库系统无论从理论上还是实践上都取得了丰硕的成果。在理论上确立了完整的关系模型理论、数据依赖理论和关系数据库的设计理论;在实践上,世界上出现了很多著名的关系数据库系统,比较著名的如SystemR、INGRES、Oracle等。
与文件系统相比,数据库系统有几个方面的特点:向用户提供高级的接口;向用户提供非过程化的数据库语言(即SQL语言);查询的处理和优化;并发控制;数据的完整性约束。
进入80年代之后,计算机硬件技术的飞速提高促使计算机应用不断深入,产生了许多新的应用领域,例如计算机辅助设计、计算机辅助制造、计算机辅助教学、办公自动化、智能信息处理、决策支持等。这些新的领域对数据库系统提出了新的要求。但由于应用的多元化,不能设计出一个统一的数据模型来表示这些新型的数据及其相互关系,因而出现了百家争鸣的局面,产生了演绎数据库、面向对象数据库、分布式数据库、工程数据库、时态数据库、模糊数据库等新型数据库的研究和应用。
2、XML简介
XML推荐标准1.0版发布于1998年2月,之后迅速在全球掀起了XML应用的浪潮。XML是一种描述型的标记语言,与HTML同为SGML(标准通用标记语言,ISO-8879国际标准)的一种应用。由于XML在可扩展性、可移植性和结构性等方面的突出优点,它的应用范围突破了HTML所达到的范围。
一篇XML文档由标记和内容组成。XML中有六种标记:元素(elements)、属性(attributes)、实体引用(entityreferences)、注释(comments)、处理指令(processinginstructions)和CDATA段(CDATAsections)。XML与HTML最显著的不同是XML文档中引入了“文档类型声明”(Document Type Declarations)。DTD使文档可以与分析器交流关于它的内容的元信息。DTD的出现,赋予了XML文档可扩展性、结构性和可验证性,使XML具备了类似于数据库的一些性质,可以利用XML来组织和管理信息;又可以与HTML一样在浏览器中方便地表示,在Internet上高效地传递和交换。考虑到与HTML的兼容,DTD并不是XML文档必需的成份。具有DTD的XML文档称作“Valid”,否则就是“Well-formed”。
目前,处理XML文档的方式主要有SAX与DOM两种。SAX(SimpleAPIforXML)是一种基于流的、以事件处理方式工作的接口。SAX 2.0在2000年5月发布,增强了许多功能,包括对名字空间的支持。DOM(Document Object Model)则是在对XML文档进行分析后,在内存中建立起一个完整的树结构,然后在此基础上进行各种操作。简单地比较来看,SAX对系统资源要求低、速度快,但对文档的操作是只读的;DOM的处理能力强大,但要求大量的系统资源,尤其是对于大的文档。而后还出现了Xpath和Xpointer用以完成XML的搜索和转换;XSL、XSLT和SOAP用以完成XML的远程对象访问,XML Query Languages的出现使XML查询语言可用于任何XML文档。
3、XML与数据库
XML文件是数据的集合,它是自描述的、可交换的,能够以树型或图形结构描述数据。XML提供了许多数据库所具备的工具:存储(XML文档)、模式(DTD,XMLschema,RE1AXNG等)、查询语言(XQuery,XPath,XQL,XML-QL,QUILT等)、编程接口(SAX,DOM,JDOM)等。但XML并不能完全替代数据库技术。XML缺少作为实用的数据库所应具备的特性:高效的存储、索引和数据修改机制;严格的数据安全控制;完整的事务和数据一致性控制;多用户访问机制;触发器、完善的并发控制等。因此,尽管在数据量小、用户少和性能要求不太高的环境下,可以将XML文档用作数据库,但却不适用于用户量大、数据集成度高以及性能要求高的作业环境。
随着Web技术的不断发展,信息共享和数据交换的范围不断扩大,传统的关系数据库也面临着挑战。数据库技术的应用是建立在数据库管理系统基础上的,各数据库管理系统之间的异构性及其所依赖操作系统的异构性,严重限制了信息共享和数据交换范围;数据库技术的语义描述能力差,大多通过技术文档表示,很难实现数据语义的持久性和传递性,而数据交换和信息共享都是基于语义进行的,在异构应用数据交换时,不利于计算机基于语义自动进行正确数据的检索与应用;数据库属于高端应用,需要昂贵的价格和运行环境。而随着网络和Internet的发展,数据交换的能力已成为新的应用系统的一个重要的要求。XML的好处是数据的可交换性(portable),同时在数据应用方面还具有如下优点:(1)XML文件为纯文本文件,不受操作系统、软件平台的限制;(2)XML具有基于Schema自描述语义的功能,容易描述数据的语义,这种描述能为计算机理解和自动处理;(3)XML不仅可以描述结构化数据,还可有效描述半结构化,甚至非结构化数据。
4、XML文件的存储
XML文件的存储方式有三大类:(1)将文件存储于文件系统(StoringDocumentsinthe File System);(2)将文件存储于BLOB(Storing Documents in BLOBs),利用数据库的事务管理、安全、多用户访问等优点。此外许多关系数据库提供的检索工具可以进行全文检索、近似检索、同义词检索和模糊检索。其中某些工具将会支持XML,这样就可消除将XML文件作为纯文本检索所带来的问题。(3)将文件存储于原生XML数据库(Native XML Databases,NXD)。NXD是专用于存储XML文件的数据库,支持事务管理、安全、多用户访问、编程API和查询语言等。与其它数据库的唯一区别在于其内部模型是基于XML的。其中,最重要的存储方式当属原生XML数据库。
4.1、原生XML数据库
原生XML数据库(NativeXMLDatabases)为XML文档定义了一个(逻辑)模型,并根据该模型存取文件。这个模型至少应包括元素、属性、PCDATA和文件顺序。其例子有XPath数据模型、XMLIn-foset以及DOM所用的模型和SAX 1.0的事件。它以XML文件作为其基本存储单位,对底层的物理存储模型没有特殊要求。例如,它可以建在关系型、层次型或面向对象的数据库之上,或者使用专用的存储格式,比如索引或压缩文件。
NXD最适于存储以文档为中心的文件。这是由于NXD保留了文件、顺序、处理指令、注释、CDA-TA块以及实体引用等,而支持XML的数据库XED(XML-enableddatabase)无法做到。XED是在原有数据库基础上扩展了XML支持模块,完成XML数据和数据库之间的格式转换和传输。从存储粒度上,可以把整个XML文档作为RDBMS表中一行,或把XML文档进行解析后,存储到相应的表格中。为了支持W3C的一些XML操作标准,Xpath、XED提供一些新的原语(如Oracle9iR2增加了一些数据包来操作XML数据等),并优化了XML处理模块。
NXD一般采用层次数据存储模型,保持XML文档的树形结构,省掉了XML文档和传统数据库的数据转换过程。NXD还适用于存储“天然格式”为XML的文件,NXD还可以存储半结构化数据、在某种特定情形下提高存取速度以及存储没有DTD的文件(良构的文件)。
4.2、原生XML数据库的结构
原生XML数据库的结构可分为两大类:基于文本的和基于模型的。
基于文本的NXD(Text-BasedNativeXMLDatabases)将XML作为文本存储。它可以是文件系统中的文件、关系数据库中的BLOB或特定的文件格式。基于文本的NXD与层次结构的数据库很相似,当存取预先定义好层次的数据时,它比关系数据库更胜一筹。和层次结构的数据库一样,当以其它形式比如转置层次存取数据时,NXD也会遇到麻烦。这个问题的严重程度尚未可知,很多关系数据库都使用逻辑指针,使相同复杂度的查询以相同的速度完成。
基于模型的NXD(Model-BasedNativeXMLDatabases)是根据文件构造一个内部模型并存储这个模型。有些数据库将该模型存储于关系型和面向对象的数据库中,例如在关系型数据库中存储DOM时,就会有元素、属性、PCDATA、实体、实体引用等表格。其他数据库使用了专为这种模型优化了的存储格式。使用专用存储格式的基于模型的NXD如果以文件的存储顺序读取文件,其性能与基于文本的NXD相似。
4.3、原生XML数据库的特性
原生XML数据库的特性(FeaturesofNativeXML Databases)有:(1)文件集(Document Collections),支持集合(Collection)的概念,其作用相当于关系数据库中的表和文件系统中的文件夹。(2)查询语言(Query Languages),最常用的有XPath(对多个文件的查询作了扩充)和XQL,以及专有的查询语言。(3)更新和删除(Updates and Deletes),NXD对文件的更新和删除方式从简单的替换或删除现有文件,到修改当前活动的DOM树,以及用于指定如何修改文件片断的语言。(4)事务、锁定和并发(Transactions,Locking,and Concurrency),支持事务处理。锁定通常是对整个文档的,所以多用户并发性相对较低。问题的大小取决于应用程序以及“文件”的构成。(5)原生数据库提供应用程序接口API(Application Programming Interfaces,APIs)。(6)NXD的一个重要特性是它可以为XML文档提供“往返车票(round-trip)”。可以将XML文件存放在NXD中,而且再取回“同样的”文件。对于以文档为中心的应用程序来说非常重要,因为CDATA部分、实体用法、注释和处理指令是这些文档不可缺少的组成部分。特别是对于法律和医学文件,按规定这些文档必须要保持原样。(7)外部数据(Remote Data),某些NXD可包含有外部数据,它来自存储在数据库中的文档。通常这些数据通过OD-BC、OLE DB或JDBC从关系数据中取出,模型可以是基于表格的或对象-关系型映射。(8)支持元素和属性的索引。
5、结论
XML技术的出现,使数据处理从文件方式到数据库系统再到文件方式的循环,但新的文件方式已经与最初的文件系统有了本质的区别----格式化文档。XML和关系数据库在数据应用和数据管理方面各有优势。
一方面,我们要研究数据库的新技术、探索数据库的发展方向;另一方面,在数据库的基本实现基础上,添加必要的新技术是探索新数据库的发展方向。