1

我需要在内存中保留一些值,类似于内存数据库。在可靠性方面,我不怕系统故障,我可以忍受。但是,我不能使用 memcache 服务,因为这些值可以随时被驱逐。当应用程序扩展时,我需要这些值在其他机器上可用。我想 appengine 不会使内存扩展或会扩展(例如,如果我将值保存在普通的 Java 集合中)?

我在这里想要实现的是“选择昵称”服务。这分两步进行。首先,用户保留昵称。然后他注册了昵称。昵称存储在一个实体组下(原文如此!)。因此,我需要避免数据存储争用。

据我从https://developers.google.com/appengine/articles/scaling/memcache了解到,我可以在一定程度上依赖于 memcache 中的值不应因任意原因而被驱逐。但是,我必须指望这会不时发生(例如在高内存水平上)。这种价值损失对我的用户来说是非常不愉快的。

4

2 回答 2

1

您的应用程序共享一个 Memcache 实例,它不是“机器”(或者更确切地说是您的应用程序实例)的本地实例。

因此,如果您正在运行 2 个实例并且它们都从 memcache 中检索相同的值,那么它们都将获得相同的值。

在云中运行“内存中”数据库是不可行的——你打算使用什么内存,实例中即将关闭的内存?

https://developers.google.com/appengine/articles/scaling/memcache

在设计您的应用程序时,请花时间考虑可以缓存哪些数据集以供将来重用。这些可能是经常查看的页面或经常读取的数据存储实体,仅举几例。您的应用程序中可能还有一些数据您希望在应用程序的所有实例之间共享,但不需要永久保存。在这种情况下,memcache 可以通过为瞬态数据提供快速高效的分布式存储系统来提高应用程序的可扩展性。将 memcache 逻辑添加到服务器端代码通常是非常值得的几行额外代码。

于 2013-01-12T12:12:28.570 回答
0

当您使用 Python27 时,您可以使用应用引擎 NDB。NDb 是一个具有自动缓存等功能的数据存储。

其他机器?您的意思是在同一应用程序的实例之间共享。

于 2013-01-12T12:10:23.443 回答