用Python和Google AppEngine开发基于Google架构的应用软件

用Python和Google AppEngine开发基于Google架构的应用软件

    在研究了一段时间的Google AppEngine之后,我发现Google AppEngine是未来一个非常不错的开发平台,希望可以尽快搞清楚GoogleAppEngine整个的平台架构,并且可以尽快基于这个平台出一个像样的东西——学习任何语言或者平台的唯一一个好办法就是赶紧拿过来就用,千万不要等,一等就过去太长时间,错过了机会。不要以为学了放在那里是一种“储备”,没有使用,就不会有储备。

    到目前为止,我认为Google的Python开发平台、BigTable、Django都是非常不错的工具,组合起来之后是一个非常强大的开发利器。

    Python是一个非常先进的、跨平台的强大的开发语言,豆瓣的后台就是使用Python进行开发的;BigTable是Google的后台存储架构,Google的部分软件就是基于BigTable进行存储的,Google的存储机制自动完成负载均衡和数据库的优化,并且在数据库的结构上就已经支持了这种网络的架构;Django是一个基于Python和关系型数据库的Web快速开发支持包,由于Google的BigTable并不是关系型数据库,所以原则上来说DJango并不支持Google的架构,但是由于Google做了从BigTable到一般关系型数据库的转换,所以DJango已经可以在Google架构下稳定的执行。

    关于BigTable,不应该将之理解为简单的关系型数据库——当然,BigTable也确实不是关系型数据库,而是Google公司基于自己的网络结构而研发的“互联网”数据库。那么,BigTable和一般的关系型数据库相比,其优点在哪儿呢?我们以一个企业的应用为例,如果一个企业应用了关系型数据库,无论是SQL Server、DB2还是其他的关系型数据库,都要考虑当数据量极大的时候数据如何均衡访问的情况,对于企业来说,必须要在现有的网络架构上扩充其架构,才能使之不断的适应越来越海量的数据要求。但是单表的数据仍然可能是极大的,比如一张表有几百万条记录,这个时候,整个系统的效能一定是非常低的。BigTable从其设计上来说,就是为了适应互联网的海量数据的,而不仅限于企业级的应用,因此其存储能力、查询能力的设计上是更加强大的。我们知道,企业级应用中,我们所面临的用户是“有限”的、可预计的;而对于互联网的应用
,我们所面临的用户则几乎是无法预计的,其行为也有一定的不确定性,从而给数据库带来了更大的风险。举一个不太恰当的例子,当一个突发事件发生的时候——比如当年克林顿总统“拉链门”的斯塔尔报告就曾经几乎让整个互联网瘫痪。之所以说这个例子不太恰当,是因为我们在当下的互联网上所需要做的,是云计算之下的面向全球的企业级应用,而不仅仅是若干个文档的下载。

    BigTable所做的事情之一就是存储结构上的优化——当然,由于其是基于互联网架构的,我们没有办法在自己的Windows或者Linux上安装一个BigTable来分析其底层结构——而且Google应该也不允许我们这么做。BigTable数据库系统从其根本上并不是为了将其数据放在企业内部而设计的(这也就是为什么Google AppEngine不希望将Devappserver.py开发的程序作为企业应用的理由之一,因为开发环境下根本不是真正意义上的BigTable,而只是一个文件模拟存储而已。)——另一个可能的原因就是除了Google之外,世界上可能没有其他适合BigTable运行的硬件架构,众所周知,Google的底层硬件结构是自创的。

    Google的BigTable的存储是实体的概念,我们关系型数据库传统意义上的“表”对BigTable来说是一个实体集合;而表中的每一行则是一个“实体”。对于单个的实体而言,“字段”——当然,这里所说的字段是对应于关系型数据库而言的,在BigTable中,我们称之为属性(Property),BigTable的属性可能不是确定数量的,如果对于一些实体来说,有五个属性,那么对于另外一些实体则可能有十个属性,这完全是根据需要而定的,不必为所有的实体都预先分配相同的属性。这种设计对于一般数量级的应用来说似乎无关紧要,因为关系型数据库本身就已经对“空”数据进行了优化处理;但是对于海量数据和系统的扩展而言就有很重要的意义了。BigTable的另外一个特性就是它的存储是可以“分组”的。例如,对于我们开发的一个系统,我们可能希望在一个事务中一次性处理一个用户的数据(这是非常可能的,可能来自于用户的操作,也有可能是因为系统的升级而需要对数据分别进行批量处理),如果有这种需要的话,我们可以将数据进行分组,分组的方法就是在创建一个实体的时候将另外一个实体作为新实体的父节点。已经创建的实体不能对其重新进行分组。分组后的数据,在Google后台的存储是存储在基础架构的同一个节点(注意,对Google而言的一个“节点”显然不是我们传统意义上的一台单机,而是一组后台存储架构,可能包含上千台服务器)上的。正是因为同一分组的数据放在同一个存储节点上,于是才可以在同一个事务中进行处理。

    除了GoogleAppEngine提供的以上三利器之外,为了更好的开发富应用的互联网系统,还必须要引入客户端的Ajax,比如Prototype或者Dojo等,从而可以使系统和用户的交互更加友好。

转载于:https://www.cnblogs.com/dnnworkflow/archive/2009/01/16/1377037.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值