技术开发 频道

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

  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数据库。

  有些产品支持基于键范围的查询,但即席查询操作和总计操作(求和,平均数和分组)需要编程实现,因为没有内置这些功能。

0
相关文章