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

2010-12-16 14:43:16 +08:00
 julia
还是前面那个GAE中实体ID不连续的问题。

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

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

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

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

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

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

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

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

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

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

那像v2ex 那样读库里值,不会出现同时的问题?
darcy
2010-12-16 16:26:13 +08:00
@julia V2EX暂时还不会遇到出现都同时发帖的问题。但是你可以做一个应用,同时向服务器发出写的请求,就会发生数据库里的计数不准确了。这种计数只能大致记录数据库中的记录条数。我之前有做一个图库(http://cdn.ioio.name/)当批量上传的时候就可能遇到这个问题
julia
2010-12-16 16:32:07 +08:00
@darcy 谢谢
darasion
2010-12-16 17:20:49 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/5919

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX