数据库解决方案对比分析对于互联网应用,随着访问量的增加,当数据库数据量达到GB以上时将不可避免的面临数据库性能瓶颈的问题,因此在数据存储方案的选择上对应用的性能、后期扩展等方面将会有很大的影响,下面我将从几个角度对目前主流的几款商用数据库和Dbshards+MySql进行对比,为您的选择提供参考。开放性sqlserver:只能在windows上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。windows9x系列产品是偏重于桌面应用,ntserver只适合中小型企业。而且windows平台的可靠性,安全性和伸缩性是非常有限的。它不象unix那样久经考验,尤其是在处理大数据量的关键业务时。Oracle:能在所有主流平台上运行(包括windows)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持。db2:能在所有主流平台上运行(包括windows)。最适于海量数据。db2在企业级的应用最为广泛,在全球的500家最大的企业中,几乎85%以上用db2数据库服务器,而国内到97年约占5%.Dbshards+MySql:能在所有主流平台上运行(包括windows)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持。并行性sqlserver:并行实施和共存模型并不成熟。很难处理日益增多的用户数和数据卷。伸缩性有限。Oracle:平行服务器通过使一组结点共享同一簇中的工作来扩展windownt的能力,提供高可用性和高伸缩性的簇的解决方案。如果windowsnt不能满足需要,用户可以把数据库移到unix中。db2:db2具有很好的并行性。db2把数据库管理扩充到了并行的、多节点的环境.数据库分区是数据库的一部分,包含自己的数据、索引、配置文件、和事务日志。数据库分区有时被称为节点或数据库节点。Dbshards+MySql:Dbshards+MySql具有优秀的并行性。DbShards将数据库拆分为独立子节点,多节点通过Dbshards形成一个透明的数据库集群,任何数据操作都可在独立子节点执行也可多节点并行,每个操作在更小的子节点完成,性能更优。安全性sqlserver:没有获得任何安全证书。oracle:获得最高认证级别的iso标准认证。db2:获得最高认证级别的iso标准认证。Dbshards+MySql:GNU宽通用公共许可证性能sqlserver:多用户时性能不佳oracle:性能最高,保持windowsnt下的tpc-d和tpc-c的世界记录。db2:适用于数据仓库和在线事物处理性能较高。Dbshards+MySql:脱离数据库自身性能限制,通过Dbshards数据拆分技术提高数据I/O性能。客户端支持及应用模式sqlserver:c/s结构,只支持windows客户,可以用ado,dao,oledb,odbc连接.Oracle:多层次网络计算,支持多种工业标准,可以用odbc,jdbc,oci等网络客户连接db2:跨平台,多层结构,支持odbc,jdbc等客户Dbshards+MySql:多层次网络计算,支持多种工业标准,可以用odbc,jdbc,oci等网络客户连接操作简便sqlserver:操作简单,但只有图形界面.Oracle:较复杂,同时提供gui和命令行,在windowsnt和unix下操作相同db2:操作简单,同时提供gui和命令行,在windowsnt和unix下操作相同Dbshards+MySql:操作简单,同时提供gui和命令行,在windowsnt和unix下操作相同使用风险sqlserver:完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。并不十分兼容早期产品。使用需要冒一定风险。Oracle:长时间的开发经验,完全向下兼容。得到广泛的应用。完全没有风险。db2:在巨型企业得到广泛的应用,向下兼容性好。风险小。Dbshards+MySql:长时间的开发经验,完全向下兼容。得到广泛的应用。风险小。可扩展性sqlserver:sqlserver版本杂乱,并且微软公司对其旗下产品的升级、兼容策略存在很大隐患,因此sqlserver扩展性较差。Oracle:Oracle向下兼容,可扩展性强。db2:db2向下兼容,但收IMB硬件平台限制,可扩展性一般。Dbshards+MySql:Dbshards不是数据库,Dbshards是大数据库拆分工具,当性能出现瓶颈时使用该工具对数据库进行拆分优化从而提升性能,扩展成本低。成本sqlserver软件成本:企业版在30-40万左右;作为一款商用数据库软件,存在很多不同的版本,造成使用者在选择时的困惑,并对后期升级造成困难(不同版本互不兼容);实施成本:只能在windows平台下进行实施,当应用存在异构环境时,其实施难度将大大提升,甚至会造成额外的实施成本(如为了能在异构环境中安装sqlserver,需要购买虚拟机软件来安装windows平台),实施局限且成本高;维护成本:sqlserver作为一款商用软件,其配套的操作工具同样也是商用软件,因此,其产生的并不仅仅是数据库自身的成本,还包括了维护数据库所需的工具软件成本;扩展成本:对于互联网应用,尤其是云平台集成第三方应用,融合多语言环境是必须面对的情况,而sqlserver对于第三方和多语言的集成和兼容都需要大量商用软件的支持,因此在平台扩展时同样会造成成本的蔓延。Oracle软件成本:企业版在30-40万左右;实施成本:Oracle是一款庞大而复杂的数据库软件,操作复杂、难度高,其对实施、维护人员的要求非常高,也就造成了实施、维护的人力成本高昂;维护成本:Oracle作为一款商用软件,其配套的操作工具同样也是商用软件,因此,其产生的并不仅仅是数据库自身的成本,还包括了维护数据库所需的工具软件成本;并且维护人员成本高;扩展成本:Oracle按CPU个数进行收费;当性能出现瓶颈需要版本升级或更换、增加硬件时就必须根据CPU数量购买Oracle授权(企业版一颗CPU授权价格在30-40万左右,最普通的一台服务器CPU数量在两颗以上,也就是说每增加一台服务器Oracle成本将至少增加60万以上),成本将成倍增长。db2软件成本:企业版在60-70万左右;实施成本:db2是IBM一款常用于企业应用的数据仓库软件,操作复杂、难度高,其对实施、维护人员的要求非常高,也就造成了实施、维护的人力成本高昂;维护成本:db2作为一款商用软件,其配套的操作工具同样也是商用软件,因此,其产生的并不仅仅是数据库自身的成本,还包括了维护数据库所需的工具软件成本;并且维护人员成本高;扩展成本:IBM在设计db2时专门为其配套一款商用工具PB,因此其在扩展时需要特定专业人才方可实施,有一定局限(中国PB程序员属于小众群体,比较少),扩展成本较高。Dbshards+MySql软件成本:一套40万;实施成本:dbShards是一个数据库拆分工具,具有数据库无关性,因此实施成本更低;维护成本:作为一款工具具有友好的操作、管理界面,同时安久具有专业的售后服务团队,维护成本更可控;扩展成本:作为一款工具软件,其主要作用是拆分数据库,提高数据访问性能,并不会随着数据库的增加而增加,这样从整体上降低了扩展的成本。兼容性sqlserver:面对复杂应用,需要多数据库集成时,集成能力弱。Oracle:面对复杂应用,需要多数据库集成时,集成能力强。db2:面对复杂应用,需要多数据库集成时,集成能力较强。Dbshards+MySql:Dbshards具有数据库种类、版本无关性,并且支持多语言(Java、C等),因此面对复杂应用,需要多数据库集成时,集成能力最强。什么是DbshardsDbshards不是数据库,Dbshards是大数据库拆分工具,是一套完整的针对大访问量、高并发应用,提高数据库访问性能的数据库优化、加速方案;其核心思想是“sharenoting,sharderveything”,专业服务、解决数据库水平拆分、解决数据库扩展难题。Dbshards的作用Dbshards的基本思路为“sharenothing,shardeverything”(“零共享,全拆分”)。这个思路揭示了数据库水平拆分技术的定义:数据库水平拆分将大量行数据按照特定的拆分策略,将数据分别存储于不同的数机器上。每个数据表存储在独立的数据库或者服务器中形成独立的分区,这些分区协同工作,如同一个未被拆分的数据库一样响应所有的用户请求。下图给出了一个实际环境中运用Dbshards的原型系统。数据库拆分就是将大数据库拆分成若干个小数据库Dbshards通过数据库水平拆分技术突破了系统I/O瓶颈,解决了数据库扩展(databasescaling)这个行业难题,使得其能够同一时间内响应超量用户请求。不同于传统的数据仓库等技术,Dbshards通过将独立的主机组建为一个透明的数据库集群,使用户请求被均匀分布到各个节点进而实现快速响应。这样的“零共享”架构可以通过最小化单机处理量来缩短联机事物处理的响应时间,进而提高系统整体的可扩展性。基于既有的经验,我们认为,数据库主要面临下列难题:1)难题1:快速响应。保证服务器的快速响应以满足大量用户发送的实时请求,尤其当存在大量数据库写请求的时候;2)难题2:可扩展性。对于数据库服务器而言,本身的I/O瓶颈是服务器扩展中的一大难题;3)难题3:高可用性。无论是定期的服务器维护还是意外的宕机事件,需要有严格的故障切换机制来保证数据库服务无中断的同时没有数据丢失;为提高数据库的性能,Dbshards严格遵守了数据库的基本原则。实践这些原则也是保证数据库高性能的唯一途径:1)原则1:数据库越小,数据库响应越快;2)原则2:数据库越大,数据库响应越慢3)原则3:始终保证数据库小型化。Dbshards基于“零共享,全拆分”的思路将关系数据按照特定的拆分策略按“行”拆分,并将其分别存储于多个具有相同数据模型的数据表中。每个数据表存储在独立的数据库服务器中作为独立的数据库节点,这些节点协同工作,构成一个数据库集群系统。对于用户而言,这样的系统就如同一个未被拆分的中央数据库一样透明。图形1给出了一个基于Dbshards搭建的4节点数据库集群架构。应用服务器(AS)上运行Dbshards/Client客户端实现对数据库集群的访问(Dbshards提供各种语言的数据库驱动,包含C,Java,PHP,Python以及Ruby)。每个数据库节点(S1-S4)运行一个独立的数据库(如MySQL),每个数据库有相同的数据模型(Database/Table),系统通过Dbshards备份代理(Dbshardsreplicationagent)和Dbshards查询代理(Dbshardsqueryagent)实现协同工作。数据拆分策略根据具体应用场景、数据库的架构、数据表的定义而定。在这个示例中,我们采用了用户的ID(CustomerID)作为拆分的关键字(Key),采用了取模算法(modulus)来决定含有特定用户ID的行数据该存放到哪个分区服务器中去。Dbshards如何解决难题1:根据数据量,最大化独立数据库服务器的可用CPU和内存等硬件资源。传统的中央数据库将所有的数据存储于同一台服务器上,所有的数据访问请求被响应时共用了同一台机器的CPU和内存等硬件资源。这样的架构会产生大量的硬件资源竞争,降低系统性能。Dbshards的创新在于将相对繁忙、数据量大的数据库拆分为一些小型的分区,将每一个分区部署于独立的服务器上。这样一来,单位数据访问请求的响应可以使用更多的CPU,内存以及硬盘等硬件资源,使得数据库系统整体性能得以提高。对于数据库而言,当数据量增加时,索引以及需要缓存的数据容量会不可避免的递增,这样会直接导致各种数据库查询请求的处理性能下降。基于Dbs