关于在 GAE 上实现 home timeline - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
DAOCLOUD
推荐学习书目
Python Cookbook
Using Google App Engine
推荐下载
Latest Google App Engine SDK
其他兼容技术
AppScale
Livid
61.5D
444.89D
V2EX    Google App Engine

关于在 GAE 上实现 home timeline

  •  
  •   Livid
    PRO
    2010-04-26 17:51:49 +08:00 8258 次点击
    这是一个创建于 5646 天前的主题,其中的信息可能已经有所发展或是发生改变。
    SELECT IN() 操作限制只能有 30 个 item,因此理论上来说,如果用传统做法,好友超过 30 个就 not working 了。而且想必很慢。

    大家有什么好想法么?
    21 条回复    1970-01-01 08:00:00 +08:00
    zaykl
        1
    zaykl  
       2010-04-26 20:16:55 +08:00
    人多流量就马上超了。。
    orlaa
        2
    orlaa  
       2010-04-26 20:35:17 +08:00
    如果已经不在乎墙了的话,国外一个便宜的VPS或者能让程序更加的“自由”,当然,看起来似乎没有部署在GAE上那么酷。
    Livid
        3
    Livid  
    MOD
    OP/div>
    PRO
       2010-04-26 20:38:32 +08:00
    当注册用户过万之后,需要面临的 scale out 问题,在 LAMP 上和在 GAE 上的难度是差不多的。
    orlaa
        4
    orlaa  
       2010-04-26 20:50:51 +08:00
    对于GAE没有深入了解,没有过多的发言权,只是感觉一个让人愉悦的web应用它的内在也是需要自由的,而GAE给我的感觉太多条条框框了。
    总之,加油!
    Livid
        5
    Livid  
    MOD
    OP
    PRO
       2010-04-26 20:56:58 +08:00
    ^_^

    我希望有一天这里能够有超过 10 万的用户,却依然很快很愉悦。
    orlaa
        6
    orlaa  
       2010-04-26 21:04:05 +08:00
    ^_^
    假如这样,估计v2ex是第一个在GAE上有超10万用户的应用,Google到时是否会有政策倾斜呢?哈,我想多了。
    number5
        7
    number5  
       2010-04-26 21:15:01 +08:00
    可以参考一下jaiku的实现,他们现在全部在GAE上了,http://code.google.com/p/jaikuengine/
    darcy
        8
    darcy  
       2010-04-27 01:39:56 +08:00
    jaiku都被Google废弃了
    Kenyth
        9
    Kenyth  
       2010-04-27 13:49:01 +08:00
    上一届Google IO会议有一个slides就是讲scalability的best practice的,你可以参考一下,结合 @number5 提到的jaiku的GAE实现一起看效果更佳:)
    zack
        10
    zack  
       2010-04-27 16:26:23 +08:00
    这确实是个麻烦问题,GAE如果支持类似Cassandra的存储机制就比较好解决了。当然最主要的还是取决于功能设计上是否有需求。
    Livid
        11
    Livid  
    MOD
    OP
    PRO
       2010-04-27 16:28:42 +08:00
    其实 Twitter 自己的做法也不是 SELECT IN(),而是为每个用户创建一个队列。然后当新的 status 发出来时,就将 status 的 ID 插入到 followers 的队列中,而 status 的正文是在一个 key-value 数据库中。

    这种做法是可以在 GAE 上实现的。只是当 unfollow 的时候,清除队列中的数据貌似很头疼。
    zack
        12
    zack  
       2010-04-27 16:42:20 +08:00
    @Livid 恩,确实是这样的。GAE并没有一个很好用的应对这种情景的存储API。

    而Cassandra似乎比较适合这样的应用场景。

    两篇参考的文章,问题的情景是基本一样的:

    http://about.digg.com/blog/looking-future-cassandra

    http://blog.evanweaver.com/articles/2009/07/06/up-and-running-with-cassandra/
    xuming
        13
    xuming  
       2010-04-27 17:07:30 +08:00
    使用query.ancestor,数据存放在同一个节点上,再加上一些必要的冗余或许可以
    Los
        14
    Los  
       2010-04-27 17:54:01 +08:00
    redis 很适合这些场景,而且性能上也跟得上去。
    vvoody
        15
    vvoody  
       2010-04-29 23:56:55 +08:00
    @livid 用Task Queue在后台维护这么一个队列?不知道效率如何
    vvoody
        16
    vvoody  
       2010-05-02 19:56:37 +08:00
    @Livid 如果已经跟随的用户发出tweets那么插入timeline队列没什么问题。但如果你新follow了一个人,他之前的tweets如何高效的插入timeline队列就是个问题了
    Tigris10
        17
    Tigris10  
       2010-08-21 20:36:19 +08:00
    可以运行在vps上吗?要怎么配置呢
    jorakura
        18
    jorakura  
       2010-12-13 15:06:38 +08:00
    有同样的需求,也考虑类似的做法。 #11 @livid提到的做法。
    有Twitter的实现的具体ref么?

    和#15 @vvoody 说的一样,插入 timeline 和 unfo 的时候的删除都会是大规模的批量操作。只能用taskqueue做,但是性能还不确定。

    这里有一个即时的性能参考 http://gaejava.appspot.com/
    keakon
        19
    keakon  
       2010-12-13 15:45:07 +08:00
    用一个model专门保存每个用户的公开时间线(实际上就是topic id),然后memcache它们

    取的时候直接用memcache.get_multi()来获取

    如果其中有些为None,再去数据库里取公开时间线

    详细的想法可以参考这篇:

    http://www.keakon.net/2010/04/26/Twitter%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BC%9A%E4%BD%BF%E7%94%A8NoSQL%EF%BC%9F
    vvoody
        20
    vvoody  
       2010-12-13 17:13:03 +08:00
    很丑陋地实现了... https://github.com/vvoody/twidao
    不过还是如 @keakon 文章里说的那样,用单一公开时间线比较好。
    jorakura
        21
    jorakura  
       2010-12-14 09:53:19 +08:00
    @vvoody twidao 很赞!学习中
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3516 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 10:28 PVG 18:28 LAX 03:28 JFK 06:28
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86