1
keakon 2010-12-16 14:53:19 +08:00
不行,因为全局变量实际上是instance级别的,如果同时run多个instances,每个都会维护一个各自的计数
memcache是跨instance的,但是你无法保证memcache一直可用 因此只能依赖datastore |
2
darasion 2010-12-16 15:04:11 +08:00
全局变量是这样丢的:
因为你写的程序都是 “服务器” 代码的一部分。 当请求到来时,GAE会将 “服务器”(包括原来的代码和你写的代码),通过分身法化为一个到多个Instances。Instances的数量是根据需要算出来的,需要多少就保留几个,多余的经过一段时间会被杀掉。 这些 Instances 保存着你的全局变量,Instance被杀掉时,你的变量也就随之而去 (就这么丢了) 。 并且每个Instance都有一份全局变量的副本,虽然值有可能相同,但他们保存的地方是不同的。并且如果值不同时它们没办法相互同步 (另一种丢法)。 所以,修改全局变量时。有可能遇到一个新的Instance,就从头开始计数了;还有可能每次遇到不同的Instances,那就成了分别在好几个全局变量上边计数了。 全局变量这个存取应该是最快的,但有上述很多缺点,鱼和熊掌不可兼得。 |
3
julia OP .... 我在自己机器上测试感觉可以。。。 原来有很多问题,谢谢前辈耐心解答,谢谢!
|
6
darcy 2010-12-16 16:26:13 +08:00
@julia V2EX暂时还不会遇到出现都同时发帖的问题。但是你可以做一个应用,同时向服务器发出写的请求,就会发生数据库里的计数不准确了。这种计数只能大致记录数据库中的记录条数。我之前有做一个图库(http://cdn.ioio.name/)当批量上传的时候就可能遇到这个问题
|
8
darasion 2010-12-16 17:20:49 +08:00
@julia 观察Instances: https://appengine.google.com/instances?&app_id=你的ID
|