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

GAE: 我这样的方法可行吗?

  •  
  •   julia · 2010-12-16 14:43:16 +08:00 · 4268 次点击
    这是一个创建于 5084 天前的主题,其中的信息可能已经有所发展或是发生改变。
    还是前面那个GAE中实体ID不连续的问题。

    我现在想到个方法,就是弄个全局变量计数,如果变量丢了才去库里取下值,否则直接取变量。这样做是不是最效率?

    还有我现在不知道这全局变量是怎么丢的。。。
    8 条回复    1970-01-01 08:00:00 +08:00
    keakon
        1
    keakon  
       2010-12-16 14:53:19 +08:00
    不行,因为全局变量实际上是instance级别的,如果同时run多个instances,每个都会维护一个各自的计数

    memcache是跨instance的,但是你无法保证memcache一直可用

    因此只能依赖datastore
    darasion
        2
    darasion  
       2010-12-16 15:04:11 +08:00
    全局变量是这样丢的:

    因为你写的程序都是 “服务器” 代码的一部分。

    当请求到来时,GAE会将 “服务器”(包括原来的代码和你写的代码),通过分身法化为一个到多个Instances。Instances的数量是根据需要算出来的,需要多少就保留几个,多余的经过一段时间会被杀掉。

    这些 Instances 保存着你的全局变量,Instance被杀掉时,你的变量也就随之而去 (就这么丢了) 。

    并且每个Instance都有一份全局变量的副本,虽然值有可能相同,但他们保存的地方是不同的。并且如果值不同时它们没办法相互同步 (另一种丢法)。

    所以,修改全局变量时。有可能遇到一个新的Instance,就从头开始计数了;还有可能每次遇到不同的Instances,那就成了分别在好几个全局变量上边计数了。

    全局变量这个存取应该是最快的,但有上述很多缺点,鱼和熊掌不可兼得。
    julia
        3
    julia  
    OP
       2010-12-16 15:11:45 +08:00
    .... 我在自己机器上测试感觉可以。。。 原来有很多问题,谢谢前辈耐心解答,谢谢!
    darcy
        4
    darcy  
       2010-12-16 15:22:44 +08:00
    @julia dev环境测试不出并发的情况,当并发发生的时候它就会出错了。
    julia
        5
    julia  
    OP
       2010-12-16 15:40:45 +08:00
    @darcy 并发。。。这个 完全不懂了

    那像v2ex 那样读库里值,不会出现同时的问题?
    darcy
        6
    darcy  
       2010-12-16 16:26:13 +08:00
    @julia V2EX暂时还不会遇到出现都同时发帖的问题。但是你可以做一个应用,同时向服务器发出写的请求,就会发生数据库里的计数不准确了。这种计数只能大致记录数据库中的记录条数。我之前有做一个图库(http://cdn.ioio.name/)当批量上传的时候就可能遇到这个问题
    julia
        7
    julia  
    OP
       2010-12-16 16:32:07 +08:00
    @darcy 谢谢
    darasion
        8
    darasion  
       2010-12-16 17:20:49 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2692 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:40 · PVG 19:40 · LAX 03:40 · JFK 06:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.