K_Reverter的网页开发记录

要么不做,要么就当作艺术品来做!

导航

我的网站已经全部运行在GAE下

        基于对现在虚拟主机服务很是失望,虽然我从来没有接触过Python,还是努力的将网站迁移到了GAE下,当然,这之中最重要的考虑还是希望在这个过程之中能够学到一些东西,随着今天完成了最后一部分:铁道换乘算法的设计,现在的网站可以说是全部运行在GAE上了。

        因此我将我的网站迁移过程之中的一些简单的心得提供出来共享一下:

        1.GAE提供的GQL虽然确实是功能很少,用起来有时候会让人想摔电脑,不过从另一个角度来讲,因为GQL要实现的是一个高性能的数据存取系统,很多时候就不得不限制一些功能,而这些功能实际上并不是不能实现,而是需要你仔细的分析你的数据,进行合理的数据库设计,合理的索引设计,合理的查询,才能实现你的功能,现在大家用的一些SQL语句,有的是帮你在自动进行这个优化,有的不管性能是不是有问题,就直接运行。就GAE来讲,将性能有问题的部分进行限制,强制要求你在这些地方多下功夫进行优化,也是比较合理的做法。

        2.GAE的数据库存取实际上速度还是有限,反正我觉得比读文件要慢多了,因此我强烈建议对只读的数据(运行期间不改动的)以文件的方式来读取,虽然这种做法有点原始,可确实能提升性能,我的几个复杂一些网页(比如地名查询)开始总是CPU超限,后来我将我的地名数据库建立成各种索引放在GAE上,现在平均CPU使用只有两位数(在后台里面看到的数字)

        3.memcache是非常有用的东西,用来做服务器端缓存真是再好不过了,如果你的页面并不要求很实时,将你的页面输出之前将内容保存到memcache之中,下次直接读取返回是提高程序性能的有效方法。

        4.你可以直接调用线上的数据进行调试。很多情况下,你本地的应用可能没有数据或者不是很全,这样给调试带来麻烦,其实你完全可以直接调用线上的数据进行调试,例如你可以在py文件之中加上如下代码:


if os.environ['SERVER_SOFTWARE'].startswith('Dev'):
    
from google.appengine.ext.remote_api import remote_api_stub
    
def auth_func(): return 'aaa@gmail.com''*********'
    remote_api_stub.ConfigureRemoteDatastore(
"dituren-service"'/data/remote_api',auth_func)
#记住,其中的用户名,密码,appid,remote_api路径都需要改成你自己的

 

        加入以上代码之后,你的应用在本地调试的时候调用远程数据库了,你上传到服务器的时候不删除此代码也不会产生问题,不过我总觉得将用户名和密码写在源码里面比较别扭吧。

        基本上就这些,对了再总结一下:GAE确实很强大。

posted on 2009-05-01 12:19  K_Reverter  阅读(1213)  评论(4编辑  收藏  举报