2011-12-23 51 views
2

我们的情况如下: 我们在schoolproject工作,其中的意图是,多个团队走动与smarthphones城市和玩游戏城边走边。 因此,我们可以有10个活跃smarthpones在城市中散步,所有发布他们的位置,并从谷歌appengine请求数据。如何让全局变量在多个Google Appengine实例上保持不变?

有人是一个网页浏览器的后面,看着所有这些球队走动,并将它们发送消息等

我们使用的是谷歌的AppEngine提供存储所有这些团队发送数据和请求,存储数据存储消息和检索他们等 然而,我们很快就发现我们在我们的读写的最大限度,所以我们搜索的解决方案,以便能够检索定期更新(这成本最多的读取和写入),而不使用任何谷歌提供的有限资源。显然,因为这是一个学校项目,我们不想为更多的读写工作付费。

存储在全局变量这一信息似乎是一个简单快捷的解决方案,这是...但是当我们开始真正的测试中,我们发现我们的一些数据不翼而飞,然后重新出现。原来是因为那里有太多的请求正在对云进行处理,以至于创建了一个新的实例,并且这些实例没有保持这些全局变量的持久性。

所以我们的问题是: 我们可以以某种方式确保这些全局变量总是在每个正在运行的谷歌appengine实例上都是相同的。 或 我们是否可以限制运行的实例数量,无论有多少个请求都执行为'1'。 或 是否有另一种方式可以更好地存储这些数据,而无需使用数据存储和不使用全局变量。

回答

3

,你应该使用内存缓存。如果您使用ndb(新数据库)库,则可以自动缓存查询结果。很明显,这不会改善你的写作,但它会显着改善你可以做的读取次数。

您需要将其与数据存储一起备份,因为数据可随时从memcache中弹出。如果您愿意承担丢失更新的(小)机会,您可以使用memcache。您可以执行某些操作,例如在数据存储中仅存储消息ID,并让控制器定期验证每个消息ID在memcache中都有相应的条目。如果缺少控制器将需要重新输入。

+0

谢谢。我们将尝试使用memcaching,这个问题主要在我们的阅读中,所以希望能够解决我们的问题。在我们尝试实现Google提供的[链接](http://code.google.com/intl/nl/appengine/docs/python/memcache/usingmemcache.html) – user1113380 2012-01-02 16:13:10

+0

memcache机制后,我会报告回来memcaching确实解决了我们的问题!非常感谢 – user1113380 2012-01-13 12:15:35

0

有趣的问题。首先有一些坏消息,我不认为有更好的数据存储方式;不,你将无法阻止产生新的实例,也不会让独立的实例始终拥有相同的数据。

你可以做的是通过智能地选择这个频率并将信息一次下载/上传,你可以限制读/级别适合你。尽管如此,这在鹿角地区仍是坚实的。

尽管几乎找到了其他所有配置的配额,但我无法找到免费读/写的限制,因此可能它们的可用性很小,但实际上只有10个智能手机给我举起了一面红旗。您确定智能手机正在以合理的频率轮询(或拨打)吗?这听起来像你可能会不必要地敲击它们。

+0

每天的可用读取数量为0.05亿次,我将尝试使用memcaching来解决我的问题,主要是读取数量,写入数量更少。 (免费写入数量为每天0.05百万次) – user1113380 2012-01-02 16:20:02

0

考虑对等体之间的通信的jabber协议。免费限制在相当高的水平上。

0

首先,肯定使用memcache,就像Tim Delaney所说的那样。这本身可能会解决你的问题。

如果不是,您应该考虑推式模型。优点是,只有当事情发生了变化时,你的客户才会一直问你新的数据。如果更新足够小以至于您可以在推送消息中提供更新,那么对于所有这些客户端,您将不必担心数据存储读取的memcache未命中或任何其他重复的工作:在数据更改时读取数据一次推送给每个人。

推送的第一个选项是C2DM(Android)或APN(iOS)。这些数据发送的数据量和更新频率有限。

如果您想获得更多技巧,可以使用XMPP。这可以让你做更频繁的更新(我相信)更大的有效载荷,但可能需要更多的工程。有关起点,请参阅有关AndroidiOS的Stack Overflow问题。

玩得开心!