`
duker
  • 浏览: 105893 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

google application engine 下应用开发的一些总结.

    博客分类:
  • gae
阅读更多

自从关注google application engine 以来,为了更深入了解这个平台,在gae上设计,开发一个小应用 sharecode. 通过这个应用,总结了使用python,gae 开发的一些特点:

开发效率高

python,django 此类动态语言及其框架开发效率确实比java ,hibernate,spring高出不少, 以sharecode 为例, 从3月初开始构思到3月底基本功能完成, 总共也就3周多一点的时间,如果是在java 下使用hibernate,spring 之类的框架,基本上不可能在这么短时间内完成.总结python,django 下效率高的原因(gae 和普通的django应用差别主要是在model方面),主要有三方面:

  • 层次的简化 : 从model 到view, django 下,尤其是在gae 下,代码的层次比spring,hibernate 下缩减了不少, spring,hibernate 按照严谨的模式, model, dao,service, 一层层上来,django 下model本身就具备了dao 的功能, 不需要再单独开发一套dao代码. model 开发完直接就可以存取.
  • 代码组件的简化 同样是model, django 中就是一个类的定义, 而hibernate 下除了类还要写映射配置,生成ddl等等乱七八糟的东西 ; django 中定义了view(相当于controller)处理http请求,定义了model 模型用于数据建模,但对于中间的逻辑代码自己就可以自由发挥了,不象在spring下需要接口,实现类,配置文件这么多组成部分,django中的逻辑代码可以简单到就是一个module 中的function. 这又大大节省了码字的时间.
  • 编码,测试,调试的时间大大缩短 , 一方面python 是动态语言,编码完成直接刷新浏览器就可以看到更改了,另一方面django,gae的开发服务器启动都非常快速, 相比较java 的服务器,估计只是其几分之一甚至十几分之一的启动时间,这点时间虽然短,但反复积累下来,也很可观了.

datastore有优点也有不足

datastore 我认为可能是整个gae 开发环境中最重要的一部分 , 因为任何应用程序都有持久化存储的需要,而在gae下,datastore是实现持久存储的唯一的手段.

datastore 的优点在于它构建在google 的bigtable 实现基础之上,能够自动分布式存储,伸缩性很好; 另一方面它的编程接口非常简单, 主要用到的就是 get,put,delete, run_in_transaction 这几个函数以及Query,  GqlQuery这两个查询接口对象.但实际使用中发现它有一些弱点和限制:

  • 不支持模糊查询或者说关键字查询 , 一般关系数据库服务器都支持 'like' 查询,并且现在也有和关系数据库集成的全文索引解决方案. 但以google 这么强的搜索功力,直到现在也没把搜索功能放到datastore api中,让人费解(不知道将来是不是准备作为增值服务要收费的 ). 虽然在sdk 源码中有一些'search' 的影子出现,但官方的文档中未有提及. 没有这个特性大大降低了datastore 的使用价值. 现在搜索引擎的流行已经培养了大家关键字查询的使用习惯 ,一个网站不能search 那真是拿不出手.
  • 对事务的支持有限 . gae datastore 有个entity group的概念,属于同一个group的entity在物理位置上存储到一起,在同一个事务中只能操作同一个group内的entity,而在实践当中,无法保证有可能需要运行于同一个事务中的entity都属于同一个group.如果把所有的entity都放到同一个group中,那就损失了datastore 的分布式存储特性和性能(看来鱼和熊掌难以兼得). 所以gae datastore不适合对事务要求高的场合, 例如'企业应用'并不适合.
  • datastore 中无法获得某种entity的数量 . 具体来说如果有一个class A(db.Model). 在运行时是无法得知到底datastore 中存储了多少A 的实例, Query 对象有一个 count 方法可以获得查询数量,但上限是1000. 也就是说如果现在有 10000个 A 的实例,我用 query = A.all()  query.count() 得到的数字是1000. 如果网站是一个内容类型的网站,想知道当前某种内容有多少数量,这就很郁闷了--办不到.
  • datastore 缺乏统计手段 . 在关系数据库中,可以使用sql 的统计函数完成,在datastore中,可能只能自己编程遍历数据实现了,而且gae 有一个单次请求不能超过30秒的限制,所以如果数据量很大,那就很麻烦.

back reference

datastore 中有一个很有用的特性叫做back reference, 具体来说 如果 A 中有一个字段使用 ReferenceProperty 引用了 B, 在B 中自动获得一个 a_set 的字段, 类型是 Query,这个Query对象返回的结果集中包含了所有引用了B的A对象, 这个特性在数据建模时是实现 1:n, m:n 这些关联关系的基础.

 

gae环境的限制太多

举一些例子, 例如

  • 30秒的请求处理时间限制,
  • 不能流输出,gae程序的所有输出都被缓存,等程序执行完毕后,一次性输出到浏览器
  • api 调用参数大小不能超过1M,
  • 通过http传递的内容不能超过10M,
  • 除了http和https 两种协议外,不能以其它方式进行出站通信.

这些限制都或多或少限制了在gae 上可以开发的应用类型.

 

其它的一些需要考虑的问题:

  • datastore 中数据模型的更改实现起来比较麻烦.
  • datastore 中数据的批量导入提供了bulkloader.py 工具,但没有官方的数据备份方案..或许这又是一个非技术因素导致的问题.
  • gae 有一个比较复杂的资源配额方案
  • 国内对appspot.com 的域名解析已经全部被封

 

最近听到消息说google 将会在5月份宣布gae平台支持java, 如果这条消息成为事实,考虑到servlet api 使用的广泛程度,gae支持servlet 和jsp应该是没有问题的. 数据存储很大可能还是 datastore. (估计会有个"jdbc over datastore"之类的官方或者第三方类库).其它还支持哪些api和类库呢,如果用到自己的类库又怎么处理?这些问题都只能等待5月份了.

 

分享到:
评论
22 楼 imcaptor 2009-10-14  
http://www.billkatz.com/2009/6/Simple-Full-Text-Search-for-App-Engine

App-Engine支持全文搜索。
21 楼 hax 2009-04-13  
tywo45 写道
没有墙啊!!!!我的应用还是可以访问


本身暂时没有被墙贱,但是ghs被墙贱了,所以无法硬射(比如把你自己的www.mydomain.com映射到xxx.appspot.com去),如果要硬射,得自己搞个域名解析服务指向到ghs的IP。
20 楼 tywo45 2009-04-12  
for java,所有程序运行于沙箱内,所以无法支持struts2,因为struts2用了ognl,而ognl用了字节码工程。
19 楼 tywo45 2009-04-12  
没有墙啊!!!!我的应用还是可以访问
18 楼 duker 2009-04-11  
现在gae上感觉问题最大就是没有搜索功能了,内容越多,这个问题越明显..
真不知道google是怎么想的..
17 楼 duker 2009-04-10  
hax 写道
貌似墙只挡了ghs,所以你还是可以自定义域名对应到appshot,就是麻烦一点,不能直接用ghs。

哦, 那值得研究下,试试看..
16 楼 hax 2009-04-10  
貌似墙只挡了ghs,所以你还是可以自定义域名对应到appshot,就是麻烦一点,不能直接用ghs。
15 楼 duker 2009-04-09  
今天看到说gae支持java 了,真是开心.
希望在gae上能产生更多更好的应用.
14 楼 towjzhou 2009-04-07  
如果不是有墙的存在,gae真是个好东西啊,全中国可以省下多少租国外主机的钱啊。
13 楼 duker 2009-04-06  
lich0079 写道
gae下django可以用admin模块吗

我没有用. 应该是不能直接用的. 不过已经有人在做这方面的工作.app engine patchhttp://code.google.com/p/app-engine-patch/

12 楼 lich0079 2009-04-06  
gae下django可以用admin模块吗
11 楼 duker 2009-04-04  
logicgate 写道
用过django,但始终还是钟情于java。

django的admin模块是很好用,但其实也就是基于python以及django底层开发的一个框架。我公司里用java开发的框架,可以说完全可以实现django admin的功能,甚至功能更强大。

当然,如果没有任何技术的积累,做个比较简单的网站,我还是会选django。


java是一个非常优秀的平台,但从生产率方面看java和动态语言确实不能相比..
现在有消息说gae平台要支持java 了.让我们拭目以待..
10 楼 logicgate 2009-04-04  
用过django,但始终还是钟情于java。

django的admin模块是很好用,但其实也就是基于python以及django底层开发的一个框架。我公司里用java开发的框架,可以说完全可以实现django admin的功能,甚至功能更强大。

当然,如果没有任何技术的积累,做个比较简单的网站,我还是会选django。
9 楼 duker 2009-04-04  
lw223 写道
django做些中小网站还是很快的,想用django做几个私活试试 呵呵

出于国情考虑,不看好GAE在国内的发展。


你说的对. 现在墙已经把到 appspot.com 的域名解析完全挡住了. 并且偶尔还出现使用二级域名也不能访问的情况.
但墙是否也会有轰然倒塌的一天呢?
8 楼 lw223 2009-04-02  
django做些中小网站还是很快的,想用django做几个私活试试 呵呵

出于国情考虑,不看好GAE在国内的发展。
7 楼 julyboxer 2009-04-02  
Django模型层是采用充血模型,不像传统的Java开发采用贫血模型,代码当然节省许多了。。:)另外,Django的Admin管理确实很强大,不知道谁有兴趣一起做一个基于Hibernate的Admin管理呢?
6 楼 duker 2009-04-01  
thinblue 写道
最近也打算 研究研究 django 以前PYTHON 都是当脚本使


python非常灵活,作为批处理的自动化工具脚本也不错.
最近google 又发起了一个项目.准备大幅提升python的运行性能..也许将来能够接近甚至超过java 也说不定
http://code.google.com/p/unladen-swallow/wiki/ProjectPlan

5 楼 xiaoyu 2009-04-01  
SPring谁说要接口的, 你不用接口也行的。

问题是你设计决定了你的实现。


没有用地python, 倒是想试试, 一直觉得python比php, ruby更顺眼(主观)。 哈 哈
4 楼 thinblue 2009-04-01  
最近也打算 研究研究 django 以前PYTHON 都是当脚本使
3 楼 lw223 2009-04-01  
断断续续学了学,挺好的语言

相关推荐

    Packt.Google.App.Engine.Java.and.GWT.Application.Development.Source.Code

    标题 "Packt.Google.App.Engine.Java.and.GWT.Application.Development.Source.Code" 暗示了这是一个关于使用Java和GWT在Google App Engine上开发应用程序的源代码包。这为我们提供了几个关键知识点: 1. **Google ...

    Packtpub.Google.App.Engine.Java.and.GWT.Application.Development.Nov.2010

    《基于Google App Engine(GAE)的Java和GWT应用开发》这本书深入探讨了如何使用 Java 和 GWT 在 GAE 上构建强大且可扩展的 Web 应用程序。通过对 GAE 的介绍、Java 和 GWT 的应用技巧以及构建交互式 Web 应用程序的...

    Packt.Google.App.Engine.Java.and.GWT.Application.Development

    根据给定的文件信息,我们可以深入探讨几个关键的IT知识点:Google App Engine、Java、GWT(Google Web Toolkit)以及云应用开发。 ### 一、Google App Engine Google App Engine是一种用于构建和托管Web应用程序...

    Google Application Engine

    **Google Application Engine (GAE)** 是谷歌提供的一种云端平台,用于构建和托管Web应用程序。它为开发者提供了无需管理服务器基础设施的便利,允许他们专注于编写代码并实现应用功能。GAE支持多种编程语言,包括...

    Google.App.Engine.Java.and.GWT.Application.Develop_GAE

    基于Google.App.Engine(GAE)的Java和GWT应用开发

    基于Google.App.Engine(GAE)的Java和GWT应用开发.pdf

    中文名: 基于Google App Engine(GAE)的Java和GWT应用开发 原名: Google App Engine Java and GWT Application Development 作者: Daniel Guermeur, Amy Unruh 资源格式: PDF 版本: 文字版 出版社: Packt ...

    基于Google.App.Engine(GAE)的Java和GWT应用开发

    [基于Google.App.Engine(GAE)的Java和GWT应用开发].(Google.App.Engine.Java.and.GWT.Application.Development).Daniel.Guermeur.文字版

    Google Appengine应用文档

    然后,你可以开始编写项目代码,按照常规的 Web 应用开发方式进行即可。 在本地测试应用无误后,你可以将其部署到 Google App Engine。通过插件提供的飞机图标,程序会自动上传并部署。在上传过程中,确保你的 ...

    google app engine开发实例

    在这个"google app engine开发实例"中,你将学习如何结合这些概念,构建一个完整的Web应用,实现数据的CRUD操作,并在GAE平台上部署。Telesales可能指的是实际应用中的一个销售电话相关的模块,这可能涉及到用户管理...

    基于Google App Engine(GAE)的Java和GWT应用开发

    基于Google App Engine(GAE)的Java和GWT应用开发_Google App Engine Java and GWT Application Development Nov.2010

    Google_App_Engine示例程序

    **Google App Engine**是Google提供的一种云计算平台,用于构建和托管Web应用程序。它允许开发者使用特定的编程语言(如Python、Java、Go或PHP)在Google的基础设施上运行自己的应用,无需关心服务器维护和扩展性...

    Google.App.Engine编程

    google工程师dan sanderson将向你展示如何设计可扩展的应用,以及如何使用app engine的api和可扩展服务完成一般的开发任务。  你将学习appengine的应用服务器架构、运行时环境和可扩展的数据存储,还有优化应用的...

    使用Google App Engine架设网站.pdf

    Google App Engine的这一特性使得开发者无需购买和管理硬件,只需关注应用的开发,降低了初创项目和技术爱好者进入云服务的门槛。同时,随着应用规模的增长,Google App Engine也提供付费服务以扩展资源,满足更高的...

    使用Google App Engine架设网站.docx

    Google 提供了一些示例应用的源码,可以在指定的下载列表中找到。同时,用户也可以从其他支持 GAE 的网站下载合适的源码。 【设置本地开发环境】 在本地搭建 GAE 开发环境需要以下两个组件: 1. Python:首先需要...

    能在XBlock中运行的开发包appengine_xblock_runtime.zip

    在 Google App Engine 应用程序的时候需注意以下几点: Create a lib/ folder in your application. Download the XBlock repo from GitHub into your lib/ folder. In the lib/XBlock folder, execute: python ...

    Google App Engine Java and GWT Application Development

    《Google App Engine Java和GWT应用开发》一书聚焦于如何利用Google App Engine(GAE)平台、Java语言以及Google Web Toolkit(GWT)来构建强大、可扩展且交互式的云端Web应用程序。这本书由Daniel Guermeur和Amy ...

    app engine初级教程资料.pdf

    这些都是开始开发Google App Engine应用的基础步骤。随着你对平台的深入学习,你可以构建更复杂的应用,利用Google的数据存储服务、任务队列、邮件服务等功能,以及其他的Python库来扩展你的应用功能。

    app engine初级教程资料.docx

    Google App Engine (GAE) 是一个由 Google 提供的平台,用于构建和托管基于 Web 的应用程序。本教程将引导您了解如何开始使用 GAE,包括环境设置、编写基本的 "Hello World" 程序以及使用 webapp 框架。 ### 一、...

    Google App Engine开发python(三)---eclipse开发python

    在本篇博文中,我们将深入探讨如何使用Eclipse这一强大的集成开发环境(IDE)来开发Python应用程序,特别是在Google App Engine(GAE)平台上。GAE是一个由Google提供的平台,允许开发者构建和托管Web应用,而无需关注...

Global site tag (gtag.js) - Google Analytics