云计算推波助澜 非关系数据库蓄势待发
时间:03-18
来源:51CTO
点击:
Google App Engine
Google App Engine本质上不是一个数据库。他是一种云技术,用于分布式Python应用程序,它是和自己隐藏在内部某个地方的数据库一起工作的。不首先通过应用程序层来访问数据库是不可能的。但是封装一个数据库命令和格式化请求数据并不困难,因此我们可以认为App Engine是一个数据库,只不过这个数据库附加了一个以Python语言写的嵌入程序。
这种额外定制的层非常有用。许多关于其它"玩具"数据库的抱怨围绕在某个缺少的操作导致不能找到正确的结果。如果你想给这里的数据库增加一些功能,你能够用Python语言自己开发出来。如果你想要有JOIN操作,你能自己用Python语言写,也能同时定制内存缓存器。这对于那些让用户存储他们自己数据的Web应用程序特别有用。如果你需要增加安全控制权限,限制每个用户看到自己应该看到的内容,你也可以用Python语言实现。
App Engine数据存储比Amazon的SimpleDB更具结构结构性,它的结构性很大一部分来自Python的对象模型。你存储的不是成对的键值,而是Python对象,这些对象被定义成非常类似于SQL模式。你能为每列设置数据类型,在你需要的列之间进行索引。事务机制也深深的和Python联系在一起,因为每个事务实际上就是一个Python函数。这么说有一些过分简单化,因为对这个Python函数还是有一系列的限制的(如每个数据项只能更新一次)。好的消息是Google数据项正在创建特殊的事务方法,对一些普通行为(如"创建"或者"更新"一行)进行抽象。
检索有意做成类似于SQL查询,实际上,Google提供它自己的类SQL语言,GQL。使用的时候,GQL被解析成查询语句。App Engine还有一套基于Python的方法集,方法集合拴在一起处理数据集合和查询。你不需要浪费分析查询周期。
值得一提的是Python栈包括了一些最好的数据库也不具备的功能特性。有一个程序库来操作图像文件,通过剪切和Goolge特有的"I feel lucky"功能对图片进行修补。你也可以将数据存储为Goolge文档,电子表格和日程数据项。起初App Engine看起来仅仅像是一个数据库,但是你也能容易的在Google栈里进行数据抽取。
直到几周前,App Engine还在测试阶段,使用它是免费的。只要你的使用空间大小在基本的限额之内,它仍旧是免费的。另外,Google的收费机制和Amazon极为相似。存储的价格比Amazon的更便宜(每月每G字节12美分),带宽的收费是相同的(10美分没G字节)。
Google的使用期限责任制与Amazon的不同。你需要制定一个个人隐私策略,保护你用户的数据。如果你的用户违反了版权规定,你必须反应给DMCA(千禧年数字版权法),你不这么做的话,Google将会为你这么做。Google保留在任何时间以任何理由删除内容的权利。"你同意Google删除、丢失任何存储内容和服务试用期传送内容、保持的通信而不负任何责任。"
这些条款越来越受到关注。现在Google承诺在决定注销账户前预留90天的时间让你将数据从服务器取走。其它受关注的条款在DMCA的问题上,这使得许多人都不解。
存在这么一个问题,如果你决定离开Google或者说Google让你离开时该怎么办。Google发布了一个不错的开发工具,让你轻松在本地机器上测试你的应用程序。使用这些工具在你机器上测试是没有技术问题的,除非你没有支持类云技术的功能。包括测试在内的数据存储自身是不会自动复制自己的,但是在自己本地机器上却能实现其它的功能。像以前一样,有一些法律问题,因为"许可证的唯一目的就是让你使用和享受提供服务的好处。"
Apache CouchDB数据库
毫无疑问我们需要使用云技术来享受这些新的服务。CouchDB是众多开源项目中的一个,该项目构建了一个用于存储key-value pairs的数据库。这个项目使用Erlang语言编写的,受Apache 软件基金支持。你可以下载源文件在任何机器上安装,然后编译运行它们。使用它是没有费用的,除了你需要花钱购置服务器。
CouchDB与Amazon的工具是相似的,但是它有一些特别之处。你仍旧以行的形式来存储key-value pairs,但是这些key-value pairs可以是任何标准的JSON(JavaScript Object Notation)数据类型,如布尔和数字类型。值的范围不局限于1024字节长度的字符串,有办法可以让其存储长数值,甚至是图形。所有的请求和响应格式化为JavaScript。没有基于XML的Web Services,只有JSON.
最大的不同在于写查询语句。CouchDB可以通过JavaScript单独写map functions和reduce functions。一个简单的查询或许仅仅就是一个map function,带有一个"If"子句来测试数据比某个数值大还是小。只有在你试图计算统计由map functions查询的数据时才会用到reduce functions。发现计算行的个数很容易办到,但是也有可能丢失了一些其它很酷的特性,因为map function只能由JavaScript来写。我除了发现计算出匹配的数目,至于其他的非学术的用途我还没有弄清楚。文档包括了一个给人印象很深刻的reduction function,用来归并统计的,但是我不知道CouchDB真的是否是处理这类事情的正确工具,如果你需要更复杂的统计,妥当的就是坚持使用传统的数据库,获得统计报表。
这个项目还有一些限制的。项目的首页称之为"一种分布式,容错,自由面向文档模式的数据库,"没有一些人工干预你是不会获得分布式和容错功能的。CouchDB有一个好看的AJAX用户界面,包含了一个form表单,能让你复制数据库。但是还不是自动的。
CouchDB计划会增加存取控制和安全模式,但是没有以文档的形式展示出来,在API中也没显示。他们设计的初衷就是使用纯JavaScript,取代SQL,或者其他的语言,这是一个好的主意,你不会获得或者失去权限阅读文档,你能写JavaScript函数来返回true或者false结果。
使用纯JavaScript也并非坏事。当我使用这些数据库的时候,我很快发现有人能够在客户端开发一个安全模型层,使用一些不错的加密技术。在客户端加强安全控制,就能减少服务器端的工作,我在《半透明数据库》一文中有一些介绍。
这个特点正在驱使一些极端用户使用CouchDB作为整个服务器栈。J. Chris Anderson,项目的委托人之一,写了一篇文章,证明CouchDB是一个应用程序服务器的全部所需。用于显示和与数据交互的业务逻辑是用JavaScript编写的,从CouchDB下载后是一个JSON数据包。
在Anderson的眼里,当所有的功能都能用JavaScript实现,在服务器上使用Ruby、Python、Java、 PHP没有什么大的意义。这种看法或许有些极端,因为总会遇到一些情况,客户机器不能保证能正确的实现一些功能,客户端的客户比我们知道的东西少。像CouchDB这种轻量级的工具使得人们开始考虑完成一项工作真正需要多少代码。