【原创】我的GAE使用体会(主要有关Datastore和Urlfetch)

12 views
Skip to first unread message

prate

unread,
Jul 4, 2008, 4:27:19 AM7/4/08
to python-cn`CPyUG`华蟒用户组
最近闲着没事,打算用GAE做点什么,由于平常不怎么编程,所以复杂的也没法做。于是想到了做一个水木社区的搜索器。把各个版面爬一遍,储存下每篇文章
的用户名和标题等信息,然后在这基础上搜索自己感兴趣的信息。泡水木的人一定知道这种搜索器的意义,比如搜某个ID在什么版上出没,以及搜索标题中含有
某个关键字的文章,水木自己的所谓令狐冲搜索太弱了,几乎什么都查不到。GAE数据库不是号称用什么big table么,我估计做这个肯定没问题。

由于这个应用本身并不复杂,主要就是整过来社区的网页然后存上,再做个搜索页面就完了,所以我连template都没怎么用

首先是获取网页,GAE对urllib进行了限制,所以只能用它提供的urlfetch,实际上和urllib里的urlopen基本上一样,提取过来
之后,我用的SGMLParser提取有用信息。
urlopen就是有一个问题会时不时地出现DownloadError这种错误,比较讨厌,不过无大碍。

然后就是datastore了,由于GAE就给了500M,而水木近700个版面,每个版面上千上万的帖子,所以怎么精简地存储就成了我最关心的问题。
水木每一条帖子不可能把全文存上,顶多存一个标题,通过观察水木帖子的标题我们可以发现大部分都是RE文,所以存的时候只要存楼主的文章标题就行了。开
始我想用的是GAE的那个entity relationship来表达文章的这种附属关系,http: //code.google.com/
appengine/articles/modeling.html ,结果这么编了,实际上并没我预想的那样效果好,7500条帖子花了3M的空
间,通过dataviewer我分析原因是ReferenceProperty是以地址的形式存储的,而GAE这个地址非常的长,因此一点都不省空间。
而且entity relationship必然要用一些datastore写语句(put),也就降低了运行速度。后来我就没用这个
relationship,不过我认为在提取合集文章中的那些用户时,这还是有用的。后来,我沿用省略RE文标题的思路换了个简单办法,近两万的文章才
花掉4M的空间。

由于GAE只能对HTTP请求作反应,所以只能把提取文章和存储做成requesthandler,通过我客户端的小程序不断发http请求,从而激发
这个handler爬水木。所以得到一个请求能执行多少东西就成了我关心的问题。我设计的程序对数据库的操作大致如下图
GQL
|
|
---yes---
| |
no put
|
GQL
|
---yes---
| |
| put
| |
---------
|
put
执行三十次

将近60次读操作,60次写操作。在本地调试的时候,不知道为什么,程序不把我这个GQL的信息放到index.yaml里,上传之后,也不报错,但是
当存了近一万条帖子之后,开始频繁报deadlinetimeout了,从logging来看是停在读那里了。后来我手工把上图的读操作信息加到
index.yaml里,上传,等到显示变成serving之后,就不发生deadlinetimeout了。可见index对于读操作的提速显著。

这就是我的一些体会,欢迎各位交流

yobin

unread,
Jul 4, 2008, 5:25:11 AM7/4/08
to pyth...@googlegroups.com
访问1000个帖子大概要花多长时间?
省略re文,是不是喜欢灌水的ID可能就搜不到了?——搜某个ID在什么版上出没
数据库最终占了多少空间?最大只有500M啊
水木的帖子是不断更新的,你的数据库也要定期更新吧?

你的这个app网站是啥?发布了么?可以贴出来让大家参观一下嘛?

prate

unread,
Jul 4, 2008, 11:19:48 AM7/4/08
to python-cn`CPyUG`华蟒用户组
1000个帖子大概2到3分钟

不是省略re文,而是省略re文标题。
数据库还没扫完,目前只扫了Intern和Visa版,花掉6M,水木一共600多个版,估计一个appengine不够
数据库肯定要定期更新。已经发布了,但是数据库没建完,就不写在这里了

Zoom.Quiet

unread,
Jul 4, 2008, 11:28:40 AM7/4/08
to pyth...@googlegroups.com
2008/7/4 prate <RUB...@gmail.com>:
>> 省略re文,是不是喜欢灌水的ID可能就搜不到了?----搜某个ID在什么版上出没

>> 数据库最终占了多少空间?最大只有500M啊
>> 水木的帖子是不断更新的,你的数据库也要定期更新吧?
>>
>> 你的这个app网站是啥?发布了么?可以贴出来让大家参观一下嘛?

收藏!
http://wiki.woodpecker.org.cn/moin/MiscItems/2008-07-04
是也乎,代码方面和表现方面,都请给出哪 ;)

--

http://zoomquiet.org'''
过程改进乃是催生可促生靠谱的人的组织!
PE keeps evolving organizations which promoting people be good!'''

wuxiaoyu

unread,
Jul 4, 2008, 12:23:10 PM7/4/08
to pyth...@googlegroups.com
呃。。我先在GAE上给LP的店做了个非常简单的流水帐录入系统。。然后给我们游戏朋友做了个仓库道具查询。。

体会是这个ORM对稍微多点的数据不太好使。。

2008/7/4 Zoom. Quiet <zoom....@gmail.com>:

prate

unread,
Jul 4, 2008, 8:56:38 PM7/4/08
to python-cn`CPyUG`华蟒用户组
谢谢你的收藏

On Jul 4, 11:28 pm, Zoom.Quiet <zoom.qu...@gmail.com> wrote:
> 2008/7/4 prate <RUB....@gmail.com>:
> 收藏!http://wiki.woodpecker.org.cn/moin/MiscItems/2008-07-04

amingsc

unread,
Jul 5, 2008, 9:26:30 PM7/5/08
to pyth...@googlegroups.com
不错,谢谢分享 ^_^




dimix

unread,
Jul 7, 2008, 4:08:48 AM7/7/08
to python-cn`CPyUG`华蟒用户组
如果你之前注册过多个app,可以通过URLFetch把几个app联合到一起使用,类似一个master拖多个client,空间就可以多一些了。

On 7月6日, 上午9时26分, amingsc <amin...@gmail.com> wrote:
> 不错,谢谢分享 ^_^
>
>

prate

unread,
Jul 15, 2008, 11:16:20 AM7/15/08
to python-cn`CPyUG`华蟒用户组
对,我现在就想这么搞。

现在正在研制标题搜索

prate

unread,
Jul 15, 2008, 11:16:47 AM7/15/08
to python-cn`CPyUG`华蟒用户组
但不知道为什么,现在似乎注册不上了

On Jul 7, 4:08 pm, dimix <dim...@gmail.com> wrote:
Reply all
Reply to author
Forward
0 new messages