技术开发 频道

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

  Hadoop MapReduce

  应该为Hadoop MapReduce在超大型数据集并行处理方面做出的贡献颁发一个奥斯卡奖,它由来自Google,雅虎,微软和Facebook的开发人员在社区开发模式下完成的,开源的Hadoop可以从Apache网站下载,商业化版本可以从CloudEra获得,亚马逊也提供了一个基于Hadoop的Elastic MapReduce服务。

  MapReduce运行在Hadoop分布式文件系统(HDFS)上,分片文件和数据都以key-value方式存储,HDFS开启了多主机数据分区功能,可以有效减少并行处理批处理任务花费的时间。MapReduce非常适合处理大型数据集,如为搜索引擎建立索引或数据挖掘,但不适合用于在线应用,因为在线应用要求的响应时间非常低。在Hadoop上构建的框架,如Hive和Pig,对从数据库为Hadoop处理提取信息非常有用。eHarmony.com就是Oracle数据库和亚马逊MapReduce结合使用的例子,利用后者对数以百万计的用户进行分析。

  实体-属性-值存储

  实体-属性-值存储(Entity-Attribute-Value ,简称EAV)源于数据库管理技术中的关系模型,它们不具备完整的SQL数据库功能,如基于非程序性和陈述性查询语言的查询模型,它们也不仅仅是一个简单的key-value数据存储,EAV数据存储主要包括亚马逊的SimpleDB,Google AppEngine 数据库和微软的SQL数据服务。

  Google BigTable使用分布式文件系统,它可以在数千台服务器上存储非常大的数据集(PB大小),它基于Google AppEngine数据库,Google自身也在使用它,和MapReduce一起,为网页和应用如Google地球建立索引,BigTable是一个需要大量分析的项目解决方案,如10亿网页和47.8亿URL。对那些寻求BigTable开源替代方案的人而言,可以采用Hadoop,Hypertable和HBase。Hypertable运行在分布式文件系统(如HDFS)上。HBase数据通过表、行和多值列进行组织的,它有一个集成式接口扫描行的范围。Hypertable是用C++实现的,而HBase是用Java实现的。

  Google AppEngine包括一个灵活的数据存储,它专门为读操作进行了优化,支持原子事务和一致性,可以和属性一起存储实体。它允许根据键和属性过滤和排序,内置21个数据类型,包括list,blob,postal address和geographical point。应用程序可以定义实体组作为执行事务更新的基础。访问Google AppEngine数据库有编程接口,可以使用Python查询对象。数据库也是可编程的,可使用Java数据对象(JDO)和Java持久性API。虽然AppEngine捆绑了一个数据存储,AppScale项目提供了一个软件操作其它数据存储,如HBasem,Hypertable,MongoDB和MySQL。

  亚马逊平台

  亚马逊SimpleDB是灵活的,基于ErLang实现的,适合于高可用应用的最终一致性数据存储套件,数据模型提供了大项目收集域,实际上是包含了key-value值的属性的哈希表,属性可以有多个值,而且不需要联合,查询语言提供查询返回一个项目名、所有的属性、属性数量以及属性列表。数据是以单个格式(无类型字符串)存储的,不应用约束,因此要得到准确的查询结果,你必须将数据按规定格式存储,例如使用0或ISO 8601:2004日期格式填充数字。

  Azure服务平台

  微软的Windows Azure和Google AppEngine以及Froce.com一样,提供了一个云计算平台,其中包括数据存储和其他应用开发特性。微软.NET服务提供了一个服务总线和认证,Live服务就是通过搭积木的方式构建的应用。微软在Azure云中也提供了SharePoint服务和Dynamics CRM服务。和亚马逊的S2和EC2类似,使用Azure服务平台的通信是基于Web Service模型的,但同时支持SOAP和REST。微软Azure捆绑了SQL数据服务(SDS),通过ADO.NET数据服务将Azure表存储进行暴露。目前该数据库仅提供了一个单一SQL Server实例,并限制了存储空间最大为10GB。对于更大的需求,必须使用分区进行水平分割。

  对于那些使用了很长时间的工业标准数据库的人,需要适应新的EAV存储,最大的不同是EAV缺乏强大的类型,SimpleDB使用字符串值存储一切,因此进行比较和排序时需要你用0进行位数补齐。微软的SQL数据服务提供Base64,布尔,日期时间小数和字符串等类型,Google AppEngine内置了20多个类型,比SimpleDB和SQL数据服务都要多。

  RDF和语义数据存储

  社交网络和电子商务已经向我们表明了许多网络应用必须使用大规模数据存储,支持上百万的用户并发访问,云计算通常被吹捧为解决这一问题非常好的办法,并提出了Web 3.0的概念。数据存储可以处理非常大的知识库和数据集编码,使用W3C资源描述格式(RDF)和W3C SPARQL查询语言传递语义。RDF数据是按照主题-谓词-对象三元组进行存储的,重要的RDF数据还存储了额外的信息,如版本信息,临时查询信息等。

  Sesame, Jena, and Mulgara是开源的解决方案,OpenLink Virtuoso是一个功能较多服务器,最近的基准测试达到了110500三元组/秒,除了SQL和XML数据库外,它还提供了在线备份亚马逊S3和安装RDFizer盒子的功能。Franz AllegroGraph RDFStore提供了一种手段在云中构建基于RDF的联合知识库存储,它支持SPARQL查询,Prolog语言和RDFS + +分析。在亚马逊EC2上,它使用10个大型EC2实例花了6.19小时存储和索引了10亿三元组数据集。可以存储RDF三元组的SQL/XML产品包括Oracle 11g,IBM Boca for DB2。在专利方面,微软一直在想办法存储RDF三元组,以及将SPARGL转换成SQL。

  文档存储和列存储

  按列存储数据虽然没有颠覆传统的按行存储数据的理论,但结合数据压缩,无共享,大规模并行处理架构时,它可以保持高性能做应用分析和商务智能处理,在云计算服务中使用Sybase IQ或Vertica列存储,组织可以在保持服务器硬件不变的情况下增强BI能力,Sybase IQ处理复杂的分析查询,加速报告处理,包括为字符串处理建立索引,如SQL LIKE查询,它通过标准数据访问API提供连接,它的Rcube方案相对普通关系数据仓库和数据集市提供了性能上的优势。Vertica分析数据库支持网格架构,TB级大小的数据库,基于标准的连接,亚马逊EC2用户可以即付即用,有一个大型AMI实例,ODBC,JDBC,Python和Ruby驱动,数据库大小每节点可以达到1TB,节点数量可以无限制增加。

  Apache CouchDB是一个灵活的,具有容错功能的数据存储,它支持JavaScript对象标记(JSON)和AtomPub数据格式,它为读取和更新命名文档提供REST风格的API。为了确保数据一致性,它具有ACID属性,不会覆盖提交的数据,它使用一个文档ID和序列号写入B叉树索引,并依靠序列号提供生成文档版本的功能。CouchDB提供了一个基于对等的分布式数据库解决方案,支持双向复制。

0
相关文章