云中的数据库---天堂还是地狱?
作者:IT168 黄永兵 编译
最近影响我们开发和部署服务以及应用最前沿的技术要数云计算了,数据库技术也发展得很快,也出现了一些新的计算模型,因此如何正确选择数据库技术以满足新的需求也成为了大家讨论的话题。
云是一种弹性计算和数据存储引擎、虚拟的网络服务器、存储设备和其它计算机资源,它的主要意义在于按需计算、效用计算、分时计算、高性能网络和网格计算。分时计算早在40年前就出现了,当时是按需计算和按使用的存储和应用进行付费。最近由Ian Foster和Carl Kesselman提出的网格计算使得通过服务模型建立大型计算机成为可能。与分时计算和网格计算类似,云计算往往需要持续的存储空间,开源项目和商业公司都已经提出了自己的数据存储和数据库方案。
公共云
可以托管应用和数据库的商业公司提供的软件即服务(SaaS)、平台即服务(PaaS)、基础架构即服务(IaaS)和数据库即服务(DaaS)。基础架构提供商包括亚马逊的弹性计算云EC2、GoGrid、Rackspace Mosso和Joyent,而微软的Azure、Google AppEngine、Force.com、Zoho和Facebook则是平台提供商,也有一些针对特定用户的云服务提供商,如惠普的云打印服务,IBM的LotusLive为企业提供的协作和社交网络服务。其它SaaS提供商如Birst和SAS提供按需商务智能服务,Salesforce.com和Zoho提供客户关系管理(CRM),Epicor、 NetSuite、SAP Business ByDesign和Workday提供企业资源规划(ERP)套件,DaaS提供商包括EnterpriseDB、FathomDB、 Longjump和TrackVia。
私有云
和服务器整合,集群和虚拟化类似,私有云是数据中心和网格技术的另一个进化结果,Gartner研究报告称政府将会拥有最大的私有云,但那些有成千上万的服务器以及大型存储需求的任何一个组织都可能建立起自己的私有云。安全性和可靠性是有能力建设私有云的大型企业考虑得最多的事情。公共云计算提供不了99.99%的正常运行时间,但这却是企业数据中心管理人员最希望在服务协议中看到的条款。而位于防火墙后面的私有云降低了在云中暴露数据的风险,也降低了在多租赁云环境中数据保护的担心,私有云相对公共云的一个问题是调用云服务时需要多个API,急需标准出台,假设亚马逊的API成为事实上的一种标准,那么它开发的私有云软件将与亚马逊的EC2 API保持良好的兼容性。
在评估云中的数据库解决方案时,需要考虑多个方面的内容:
1、 首先需要考虑应用程序服务的类型:
商业智能(BI),电子商务交易,知识库,协作等。
2、 其次,你必须确定是适合采用公共云还是适合采用私有云。
3、 第三必须考虑是否易于开发。
当然,预算不能忽视。
什么系统将会运行在云上?
有些组织利用云提供商作为其关键应用或数据库的备份,而不是将云作为主要的选择,oracle用户可以使用亚马逊的简化存储系统(S3)为oracle数据库备份,云计算可以作为一个灾难恢复选择。
纽约时报创建了时间机器项目,它是一个网上查阅数字档案的系统,它是一个云计算项目很好的例子,除了提供按需计算外,它的主要目标是托管长期运行的应用,特别是数据库应用。
云用户往往希望以一种伸缩性好,按需提供服务的架构部署应用和数据库,使用云服务的常见用户是创业型公司和以项目为生的用户,他们希望在基础设施方面减少投资。但亚马逊的公共云也被用于支持电子商务网站,如NetFlix.com,eHarmony.com和Target.com。电子邮件是一个现代化企业的骨干,如波士顿凯尔特人队就将电子邮件和协作应用放到云上了。企业也可以选择使用云托管ERP或CRM套件,如开源的ERP套件(Compiere,Openbravo,SugarCRM)和BI解决方案(Jasper,Pentaho),由于数据仓库使用来自业务系统的源数据,因此组织也可能使用云托管业务数据库。
在现收现付的基础上,云按需处理配置,主机、IP地址和磁盘阵列不是永久地分配,但公共云上的数据库可以被永久地存储,这样可以避免在发生火灾时批量加载数据库,但在多租赁存储情况时,数据库的安全就需要着重考虑了。
云特别适合处理大型数据集和计算密集型应用,这些都受益于并行处理,如提供视频和数据分析。亚马逊EC2的早期用户,包括生物医学研究机构,医药,生物工程和金融机构,他们早期采用的是网格计算,如金融建模,药物发现和其它研究,医学研究往往需要大量的模拟遗传测序和分子间的相互作用,之前已经使用网格技术搭建起来了,常用的程序是基础本地对准搜索工具(BLAST),最近也开始使用云了,研究人员还使用MapReduce软件在云中进行基因分析。Eli Lilly使用亚马逊EC2处理生物信息学序列信息。
云计算也可由于其它目的,如将SaaS和企业系统进行集成。商务智能(BI)活动,如分析,数据仓库和数据挖掘,要求的支出要中小企业望而却步。云计算提供了一个吸引力,因为商务智能可以按需使用,按使用情况进行收费了。
云计算和商务智能结合有多种手段,一种选择是将数据和应用托管到SaaS提供商,另一种选择是创建一个云计算基础设施环境,第三种办法是两者都做,使用数据复制或数据集成套件。
PaaS,公共云和私有云
平台即服务(PaaS)解决方案将开发工具和数据存储打包到一起,但用户可以选择一个基础设施提供商或是建立自己的私有云使数据存储或数据库满足应用和预算的需要,有开源和商业化的产品可以选择,从简单的可扩展数据存储,到功能强大的处理复杂查询和交易的平台。
云计算中的数据库,数据存储和数据访问软件必须是经过评估及适合于公共云,又适合于私有云,同时提供一流应用支持的产品。例如,亚马逊的Dynamo用于构建一个值得信赖的环境,没有身份验证和授权要求,环境是否支持多租户或多实例应用程序也会影响数据库的决定。
数据库和数据存储
云中的数据库选择包括单一格式数据存储,文档数据库,列数据存储,语义数据存储,联合数据库和对象关系数据库,后者包括IBM瑞士军刀服务器,微软,OpenLink和oracle,它们处理SQL表,XML文档,RDF和用户定义的类型。
构建一个PB大小的搜索引擎和处理命令或映射无线网络有很大不同,应用程序的需求和数据存储任务有很大不同,对于托管到云中的新应用程序,开发人员主要看几个数据存储类:
1、 SQL/XML(对象关系)数据库
2、 列数据存储
3、 分布式散列表(DHT),简单的键值存储
4、 元组空间变异,内存数据库,实体属性值存储和其他非SQL数据库具有的功能,如过滤、排序、范围查询和事务等。
了解应用程序对伸缩性、负载均衡、一致性、数据完整性、事务支持和安全的需要非常重要,对于非常大的数据集可伸缩性是云计算必需具备的特性。
关联数组、字典、哈希表、环和元组空间已经出现了几年,和实体属性值存储,数据库分区和联合数据库一样,但是云计算侧重于可扩展性和负载均衡,跨多个服务器分布数据,
元组空间是一个分布式内存共享解决方案,包括对象空间,JavaSpaces,GigaSpaces,LinuxTuples,IBM TSpaces和PyLinda。你可以在亚马逊的EC2上找到GigaSpaces极限应用平台,它包括一个本地和分布式Jini事务管理器,Java事务API(JTA),JDBC支持,B叉树和基于散列的索引功能,亚马逊的SimpleDB也提供了标准的元组空间接口,但添加了二级索引,支持传统的查询操作。
对于大型数据集和数据库,分区数据已经成为并行查询处理和负载均衡的得力助手,水平分区已经受到建立TB级云数据库的开发商们的注意,因为在亚马逊,Digg,易趣,Facebook,Flickr,Friendster,Skype和Youtube上都已经成功了。
SQLAlchemy和Hibernate分片,Python和Java对象关系映射器提供的分片功能对云数据库设计很有用。Google开发的Hibernate分片用于将数据推送给Hibernate项目之前进行分组,可以使用SQLAlchemy或Hibernate手动为Google AppEngine进行分片,也可以使用云数据存储,如MongoDB,它提供手动创建分片的管理命令。
分布式哈希表和key-value数据存储
分布式哈希表和key-value存储是构建可伸缩的,负载均衡的应用程序的工具,不强制执行数据完整性、一致性、和原子持久性检查,它们有限地支持应用做即席查询和复杂分析处理。这样的产品包括memcached, MemcacheDB, Project Voldemort, Scalaris, and Tokyo Cabinet。
Memcached使用得非常普遍,广泛用于数据库驱动的网站缓存解决方案,他是一个巨大的关联数组,使用GET或PUT功能访问,用一个键值标识数据的唯一性。对于缓存查询代价高的SQL语句返回的信息特别有用,如数量和总计。MemcacheDB是一个分布式key-value数据存储,符合memcached协议,但使用了Berkeley数据库进行数据持久化存储。
Scalaris是一个分布式key-value存储,它是用ErLang实现的,它为事务实现了无阻塞提交协议,使用Web接口,你可以读写key-value值,每个操作都是一个原子事务。使用Java可以执行更复杂的事务。Scalaris具有很强的一致性,支持对称复制,但没有持久性存储。
开源的Tokyo Cabinet数据库key-value存储目前在网上很多社区讨论得火热,它的速度快得惊人,使用哈希表引擎存储1百万条记录只需要0.7秒,使用B叉树引擎时也只需要1.6秒。数据模型是每个键都有一个值,它支持LZW压缩,当键排好序后,可以进行前缀和范围匹配,在处理事务时,它可以在写入日志和影式分页之前写入。
Tokyo Tyrant是 Tokyo Cabinet的一个数据库服务器版本,它主要用于高容量应用中缓存SQL数据库。
有些产品支持基于键范围的查询,但即席查询操作和总计操作(求和,平均数和分组)需要编程实现,因为没有内置这些功能。