查看文章 |
用picasa提供的api实现图片数据备份的方案
2009-02-17 01:18
单硬盘的服务器总是要面临数据备份的问题,前文讨论过单硬盘服务器上《中小规模mysql数据库备份的gmail解决方案》,这里来讨论图片数据的备份问题。同样,在“云计算”时代,我们依然可以用google提供的服务——picasa来解决这个问题。 一、flick、yupoo、picasa服务的对比 不过,之前还是来讨论一下为什么要采用picasa提供的服务,而不是选择flickr,或者国内的图片服务提供商yupoo呢? 1、首先是从成本来说,这三者都有提供免费的服务。 flickr的免费账户只能显示出最后上传的200张图片,从这一点,基本就可以被淘汰掉了。这也许是由于flickr的商业化进程比其他两个服务要走得更远所导致的吧。 yupoo提供了没有容量限制的免费服务。这是其他两个服务没法比的。 picasa提供了1g的容量给免费帐号。这对于我们基本可以满足需求了。 2、其次从稳定性来说,这几家的实力对比还是很明显的。yupoo作为国内的年轻团队,要和it行业里边的两大巨头比,实在是有些不对称。从这一点来说,基本可以淘汰yupoo了。不过,这是个反低俗的时代,还有gfw的阴影笼罩,所以对于国外的服务也会形成一些威胁。flickr之前就已经遭遇过这只黑手了。不过,尽管如此,我们还是会宁愿相信这些大头吧。 3、再次就是开发难度了,即api的开放程度及sdk的语言丰富程度。不过比较一下,发现都还做得很不错,能用到的功能都有了,sdk的版本也较多,在这个环节还应该是旗鼓相当的水平。 flickr的api提供了版本最为丰富的sdk,主流编程语言当然是一网扫尽,连ColdFusion、Delphi等较边缘的语言也没有放过。 yupoo号称是“国内第一个开放完整API服务的web2.0站点”,不管是不是第一,但是其“API文档”还是写得相当认真和完整的。地址是http://www.yupoo.com/apidoc/,而且提供了多个版本的sdk,包括有php、.net、c++、flash as(不知道为什么没有java的)。 picasa也提供了丰富的api文档,提供的sdk也相仿丰富,囊括了java、.net、php、python这些主流语言。 综合这3点来比较,发现picasa还是其中最优秀的,但确实最适宜的,没有明显的缺点。 二、picasa API的使用方法 和gmail备份数据库数据不一样,那只需要在服务器上发一个带附件的邮件给gmail即可,而要利用picasa的服务,则需要取得picasa服务的相应权限,比如创建相册、上传图片,这就需要利用到上述第3点诉说的api和sdk了。在这里我们选择了picasa的php版本的sdk来进行相关的研究。 使用sdk之前,需要做一些准备工作: 1、下载和安装php 2、下载Google Data Library。这是zend framework中的一部分,不过我们可以从http://framework.zend.com/download/gdata/下载到gdata的一个独立版本,而不用下载zend庞大的完全版本。 接下来就可以使用sdk进行相应的操作了。比如进行基本的picasa账户的验证: require_once 'Zend/Loader.php'; $serviceName = Zend_Gdata_Photos::AUTH_SERVICE_NAME;利用http://code.google.com/intl/zh-CN/apis/picasaweb/developers_guide_php.html页面提供的实例,基本就可以实现将服务器图片同步到picasa账户的目的了。这里举一个简单的例子。 假如服务器里边有一些按年份和月份归档的图片,存储的目录结构形式为 “年份/月份/图片”,比如 +2008 -01 1200000.gif 1200001.gif ... -02 -03 那么同步到picasa帐号时可以建立这样的对应关系,建立2008_01、2008_02等这样的目录,然后存储与服务器对应目录的图片。总之,无论服务器上的目录结构如何,有多少个层次关系,最后需要将每一个包含有图片的文件夹唯一映射到一个有唯一名称的picasa上的相册,而且,为了能够还原数据,这个映射应该是双向的,即从picasa相册的名称,可以还原到服务器上一个无论多么复杂的目录结构。虽然这段话很绕,不过,理解应该还是很简单的。最简单的处理方式,就是将服务器上的目录结构用连字符链接起来成一个字符串作为picasa的相册名称。比如 目录层次为 a/b/c/d的文件夹,可以映射为a_b_c_d的相册名称。 说了那么多,不过有一个最重要的需要注意,picasa里边每个相册最多能包含500张相片。因此,上传相片到一个相册时,需要检测这个相册是否已经有500张相片了,如果有,则需要新建一个新的相册,新的相册名称,则可以在原来相册名称后边用连字符加上数字进行表示,比如a_b_c_d的相册满了,接下来可以新建a_b_c_d_1的相册,如果这个也满了,就可以新建a_b_c_d_2的相册,依此类推。最后,还原数据的时候,只要将前相册名称前7位为a_b_c_d的对应到a/b/c/d的文件夹即可。 不得不说,开放让这个世界更加趋近完美! |
最近读者: