DAOCLOUD
推荐学习书目
Python Cookbook
Using Google App Engine
推荐下载
Latest Google App Engine SDK
其他兼容技术
AppScale
Livid
279.45D
571.36D

关于在 GAE 上实现 home timeline

  •  
  •   Livid ·
    PRO
    · Apr 26, 2010 · 8783 views
    This topic created in 5869 days ago, the information mentioned may be changed or developed.
    SELECT IN() 操作限制只能有 30 个 item,因此理论上来说,如果用传统做法,好友超过 30 个就 not working 了。而且想必很慢。

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

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

    这种做法是可以在 GAE 上实现的。只是当 unfollow 的时候,清除队列中的数据貌似很头疼。
    zack
        12
    zack  
       Apr 27, 2010
    @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  
       Apr 27, 2010
    使用query.ancestor,数据存放在同一个节点上,再加上一些必要的冗余或许可以
    Los
        14
    Los  
       Apr 27, 2010
    redis 很适合这些场景,而且性能上也跟得上去。
    vvoody
        15
    vvoody  
       Apr 29, 2010
    @livid 用Task Queue在后台维护这么一个队列?不知道效率如何
    vvoody
        16
    vvoody  
       May 2, 2010
    @Livid 如果已经跟随的用户发出tweets那么插入timeline队列没什么问题。但如果你新follow了一个人,他之前的tweets如何高效的插入timeline队列就是个问题了
    Tigris10
        17
    Tigris10  
       Aug 21, 2010
    可以运行在vps上吗?要怎么配置呢
    jorakura
        18
    jorakura  
       Dec 13, 2010
    有同样的需求,也考虑类似的做法。 #11 @livid提到的做法。
    有Twitter的实现的具体ref么?

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

    这里有一个即时的性能参考 http://gaejava.appspot.com/
    keakon
        19
    keakon  
       Dec 13, 2010
    用一个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  
       Dec 13, 2010
    很丑陋地实现了... https://github.com/vvoody/twidao
    不过还是如 @keakon 文章里说的那样,用单一公开时间线比较好。
    jorakura
        21
    jorakura  
       Dec 14, 2010
    @vvoody twidao 很赞!学习中
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   945 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 62ms · UTC 20:17 · PVG 04:17 · LAX 13:17 · JFK 16:17
    ♥ Do have faith in what you're doing.