技术开发 频道

云中的数据库---天堂还是地狱?

  SQL/XML数据库

  批评家认为SQL数据库是个幸存者,SQL应该消亡,其它还包括面向对象编程(OOP),联机分析处理(OLAP),互联网计算和WWW,有些人认为SQL平台对于大型负载和数据量提供的可扩展性远远不足,UPS的物流系统中央数据库每小时要处理5900万个事务,它有一张表的记录超过了420亿,每小时的峰值负载是10亿SQL语句,它们的数据库采用的是IBM DB2。eBay的数据仓库运行在Teradata系统上,大约有5PB数据。LGR电话通话记录信息达到了310TB,采用的是Oracle数据仓库,在最近的一次会议上,微软报告Hotmail已经达到了3亿用户,每天要处理超过20亿封非垃圾邮件,数据库采用的是SQL Server服务器农场。

  SQL/XML数据库平台提供了一个丰富的查询模型,支持SQL,XQuery,XPath表达式和SPARQL查询,通常一个key-value存储需要应用程序中的逻辑执行以记录为导向的查询处理,但在编程时,SQL解决方案提供了一个说明性编程解决方案,它依赖于查询优化器生成数据访问路径。SQL平台提供成熟的管理工具和基于标准的连接,但高存储容量SQL配置尚未出现在付费使用的云中。

  IBM DB2提供了一种混合存储引擎,支持事务处理,商务智能和XML文档处理,目前它拥有多项TPC基准测试世界记录,包括在一台8处理器/64核心集群,运行Red Hat Linux高级服务器版的服务器上百万级TPC-C事务/秒的记录,亚马逊EC2 AMI捆绑的是IBM DB2 Express版或工作组版,以及Informix动态服务器版和工作组版。如果你购买了DB2企业版或Informix动态服务器版,也可以将它们的许可迁移到EC2上。除了DB2和Informix动态服务器外,还有预先打包好的AMI和IBM Lotus Web内容管理和WebSphere sMash,对于DB2或IDS开发,IBM提供了Developer AMI for EC2工具,不需要DB2或IDS使用费用。

  Oracle用户可以将Oracle 11g数据,融合中间件和企业管理器许可转移到EC2上,也提供了现成的AMI和Oracle安全备份云模块,使用亚马逊S3可以创建压缩和加密的数据库备份。可以使用它的SBT接口轻松将S3备份集成到Oracle恢复管理器中,可供选择的包括Oracle 10g Express版,11g企业版,11g SE和WebLogic Server 10g,Oracle的许可政策允许转移融合中间件到EC2上,包括WebLogic Server,JRockit(Java VM),Coherence和Tuxedo事务处理监控器。

  Oracle Coherence是一个在内存中的,存储key-value值的分布式数据网格,它为分布式数据提供线性扩展(据说曾经部署过5000个节点),复制,缓存和透明容错。Coherence支持在整个网格上分析和汇总,它可用于C++,Java和.NET开发平台。Oracle真正应用集群目前公共云提供商还没有成功的例子。

  MySQL企业版是一个非常适合于云计算的平台,它可以扩大到多台服务器,也可以只使用主/从复制,有些MySQL用户已经为亚马逊EC2创建了高可用解决方案,使用的是多实例主-主复制集群方式实现的。MySQL企业版用户可以申请24×7的EC2支持服务,如果是铂金用户,你可以获得一个企业仪表板,复制监视器,连接器,告诉缓存(memcached)和MySQL高级分区。Continuent和Sun也正在努力让MySQL集群技术可以在云计算中发挥作用,如GoGrid,Rackspace Mosso和亚马逊EC2。

  EnterpriseDB公司的Postgres plus云版本是Postgre SQL增强了GridSQL,复制,RAID异步预取和分布式内存缓存功能的版本,GridSQL使用无共享架构,以支持并行查询,处理高可扩展的环境,如网格和云,对于这个云版本,EnterpriseDB公司与Elastra(它在亚马逊上有一个SaaS产品使用了PostgreSQL和MySQL,以及一个集群数据仓库管理产品)建立了合作伙伴关系,在尝试使用EC2实例管理数据库时,Elastra使用亚马逊S3作为持久性解决方案,以解决临时的磁盘存储问题。

  内存数据库和缓存

  对于那些需要高吞吐量的应用,部署内存数据库和缓存可以满足其需要。一种解决方案是将内存数据库和普通磁盘SQL数据库进行组队,前者作为后者的缓存。TimeTen和solidDB都是很好很强大的内存数据库产品,分别被Oracle和IBM收购了。

  Oracle TimeTen是一个可嵌入的内存数据库,支持ODBC和JDBC数据访问。它可以为Oracle 11g数据库提供实时缓存和自动同步。IBM solidDB维护数据库的冗余拷贝,提供ODBC和JDBC查询功能。它可以为实例大规模使用分区,作为SQL数据库的缓存,并定期做快照(检查磁盘)。GigaSpaces XAP构建在三元组空间共享内存模型上,提供JDBC查询功能。

  为了提高响应速度,高容量网站通常使用缓存减少SQL查询。Ehcache是由LinkedIn使用的分布式Java缓存。Memcached服务器常常用于为MySQL应用程序提供分布式对象缓存。JBoss缓存以及集成到开放的云平台GridGain中。Grid Dynamics使用亚马逊EC2运行Monte Carlo模拟器将GridGain平台从2个扩展到了512个。Quetzall CloudCache是针对托管在EC2上的云应用程序的,它返回JSON或XML格式的数据,它可以运行在多个EC2区域,它提供REST风格的API,捆绑了Ruby,Python,PHP和Java开发。微软目前正在预览一个分布式内存缓存,代号Velocity。它支持按键或标记检索数据,它包括了一个ASP.NET会话提供程序。

  联合数据

  联合数据库为分散的数据聚合提供了一个解决方案,Open SkyQuery和Flickr已经有成功的例子了。SkyQuery在联合的多个数据源上执行分布式查询。Flickr使用分片在联合MySQL数据库上支持每天上亿的查询,这种类型的成功和可扩展性需要云计算,并因此推出了新的联合数据和分片。兼并和收购也迫使建立联合数据存储以执行商务智能,以及其它查询不同的客户关系管理数据库。

  IBM以及在使用GaianDB,它是基于Apache Derby的,IBM用它来测试一个轻量级联合数据库引擎的性能。它分布的数据库多大1000多个节点,GaianDB可以在1/8秒内查询,5秒钟取回了百万行记录。

  平台和API问题

  为公共云计算选择数据库会受到选择的云提供商的限制,SaaS提供商如Google AppEngine和Force.com为开发提供了一个特殊的平台,包括预定义的PAI和数据存储,但私有云和基础架构提供商如GoGrid, Joyent和Amazon EC2,能够满足云用户对软件,数据库环境和API的需求。

  除了云存储API外,开发人员可以实现各种各样的数据存储API和为SQL/XML数据库开发基于标准的API,为云开发应用的程序员可以使用SQL API和云服务API,对于亚马逊涉及到使用Web服务描述语言(WSDL)调用特定的Web服务,对于使用云实现富互联网应用(Web 2.0)的项目,开发人员可以使用JavaScript对象标记(JSON)和Atom发布协议(AtomPub),不止一个大师认为AtomPub应该成为访问基于云的数据的事实标准。

  易于开发是云数据库解决方案的一个重要考虑方面,应用编程接口(API)是一个主要的因素,有些云数据访问编程可以使用我们熟悉的API,如开放数据库连接(ODBC),JDBC,Java数据对象(JDO)和ADO.NET。

0
相关文章