日期:2014-05-16  浏览次数:20542 次

云时代信息系统的数据库
    数据库是信息系统的核心,一般数据(信息)无论经过怎样过程的逻辑计算最终都要持久化到数据库中。 基于“云计算”的背景,我们可以把信息系统的数据库简单得分为传统关系数据库,云数据库(DBaaS)和NoSql数据库。

    传统应用的数据库大多数会选用oracle等商用关系型数据库,还有一部分会选择mysql等开源数据库。商用数据库经过多年发展,非常稳定可靠,但也有一些缺点如Licence价格昂贵、维护成本高、人员要求高,而且在高并发、海量数据的情况下,需要很多开发技巧。

     最成功的SAAS厂商Salesforge提供了database.com 云数据库, 号称超过87200个组织包括银行、政府机构、医疗机构在使用它。微软也提供了sql  azure,并提供了与传统的 sql server相一致的开发工具。database.com 和  sql zure 都是关系数据库,提供了事务的支持, 并且 database.com 、sql azure等数据库还提供了按需购买,自动维护,自动容灾存储,水平扩展,海量存储等高扩展及高可用的能力(至少他们是这么宣传的)。还有一种基于虚拟机的DBaaS产品如amazon的amazon rds,是基于mysql进行改造,我认为并不是云数据库的发展方向。Ddatabase.com 以及sql azure正式发布的时间都不长,都没有进入中国, 而且由于国内用户对数据安全的担心,用户培养也需要很长时间,中国的云数据库之路还有很长一段路要走。

    还有一类NoSql 数据库,不提供关系模型,不提供实时一致性,但是提供了高可用性及高扩展性,最著名的是google的bigtable 以及 amazon的dynamo,开源的实现也很多如mongodb,hbase等。NoSql数据库出身于大型互联网公司,也决定了更适合大型互联网应用。NoSql数据库在信息系统高数据一致性要求下,并不适合,但是可以作为企业应用的一个很好的补充,并不是所有的数据都有高一致性要求。

     云时代信息系统采用的数据库可以是云数据库,也可以是NoSql数据库,也可以是传统关系型数据库。例如,可以在amazon提供的EC2上运行oracle、mysql,也可以使用S3、SimpleDB等NoSql服务,在EC2上开发可以充分利用关系数据库以及NoSql数据库的特性。 一些非关键信息系统完全可以采用廉价的NoSql数据库。如google 的 GAE 提供了多达1G的免费空间。

     企业的钱远没有个人的钱好赚,国内“云计算”的境况还是雷声大雨点小,但是现在很多针对个人的应用已经放到云上了,如网易围绕邮箱做的很多个人应用,很多人正在享用wps云存储带来的便利,智能手机(iOS,android)商店中的联网应用,但个人云计算带来的便利必然会让企业云计算进入快速发展阶段。对大多数企业来讲,SAAS是他们看到的云计算形态。大规模的SAAS应用需要PAAS和IAAS的支撑,并且对PAAS和IAAS提出了更高的要求。 现在一些SAAS的提供商提供的只不过是高级虚拟主机的应用,例如后台使用mysql集群,甚至为高级用户单独配置独立的mysql服务器,SAAS 的外表下还是传统的解决方案,这种数据存储方式和传统的数据库没有本质的差异,只不过是社会分工更加细化,SAAS运行商可以更专业的进行集中维护;然而这种方式维护成本非常高,并且不能解决海量数据以及高并发等带来的问题。

      CAP理论,即一致性(Consistency),可用性(Availability),分区容忍性(Partition Tolerance)三个需求,最多只能同时满足两个;这是被证明了的理论,而不是软件工程领域的经验总结,所以我们的设计不是要发明“永动机”要超越CAP理论,而是在设计中根据业务实际情况在一致性、可用性、分区容忍性上做取舍。我们知道,在高并发(高并发读、低并发写)情况下,信息系统的数据库一般采用读写分离的手段,例如一个可读写的主机,带两个只读的从机,主机上写数据、从机上读数据情况下我们无法做到实时一致性,要求实时一致性的数据只能在主机上完成全部的读写。即使在同一台机器上,实现实时一致性的代价也非常高,如在大多数场景下,我们选择的隔离级别为读提交(read commited),会导致不可重复读(nonrepeatable read)和幻像读(phantom read);在 未提交读(read uncommitted)级别下可以产生脏读(dirty read);只有序列化(serializable)级别才可以实现真正的实时一致性,但是序列化级别的效率太差,我们一般会采用其它的锁定策略来实现业务逻辑要求的一致性。所以,信息系统对一致性的虽然比互联网应用要高,但是在大多数场景下并不是要求实时一致性,在海量数据和高并发的情况下和互联网应用一致,对可用性和分区容忍性要求更高。

     信息系统一般对查询和统计要求比较多,而NoSql数据库一般不支持sql语句,不提供join连接,不支持复杂查询,所以只能做单表应用或对查询要求不高的应用,如系统日志等。而云数据库可以完全可以满足信息系统的各种需求,首先云数据库是关系型数据库,提供了完整的关系数据库功能,微软的 sql zure 甚至提供了与本地数据库相同的开发体验;其次,在海量数据和高并发下提供了水平扩展的能力、降低了系统开发的难度;再次,由于高并发对很多企业来说有一定的时效性,这样就可以根据高并发的时间来购买相应的服务,降低了拥有成本。

     云时代的数据库是分布式的、基于云的、少维护的、高度可伸缩的。云时代的信息系统是基于云数据库、在线开发的、开发即运行的。salesforce的force平台具备“云时代的信息系统”的特征,见 http://www.salesforce.com/platform/;  也有开源的项目“云鹤平台”,可能是实现的更好, 见  http://code.google.com/p/eeplat/ 。