在所有实例上存储appengine上的对象列表

时间:2013-08-13 01:06:02

标签: java google-app-engine storage temporary-objects

我在Google App Engine上有一款应用。它处理实时数据而不考虑过去的数据(因此没有数据存储/完全持久性),因此在实例崩溃或新部署的情况下,我不需要任何非常可靠的恢复数据。

由于负载,我有多个实例需要共享一个对象列表。我研究了memcached,但是这需要在地图风格的界面中从键到对象的映射,而无法转储所有条目。

此外,我希望将条目过期,除非“碰撞”,尽管可以处理用户代码。

对于不涉及数据存储区的合理解决方案是什么?我更喜欢它能够处理来自多个应用程序引擎实例的并发读取和写入(这就是为什么简单的Java对象声明不能像每个实例那样工作的原因。)

Memcached可能存储单个对象,但它需要获取对象,获取某种锁,修改它,然后将其写回缓存。

N.B。 presistent app engine数据存储区中存在不相关的数据。

澄清:我需要所有实体。实体本身可以随时修改,通过到期或半自动删除,或从头开始创建。我不是特别能够前往可收费的后端。

编辑:是的,它适用于本地存储的单个列表,但我预计需要多个实例的峰值。虽然我不介意延迟同步,但我至少需要尽力而为的方法来获取完整列表。但是,所有没有后端的实例之间的循环通信相对不可扩展,而且我会陷入更多的租用服务器场景中。

我不关心在另一个前端实例上提交更改后是否立即通过更改。然而,这些变化需要100%确定。我只看到插入和更新,其中lastSeen值(长)增加。还应该复制或反映所有实例的更新。

注意:赏金已经退还,因为当时的情况我无法奖励,我无法控制。我会在可能的情况下重新添加。

1 个答案:

答案 0 :(得分:0)

这里的数据存储有什么问题?

如果您担心数据库中包含大量项目会占用太多费用,只需使用datetime_created字段保存每个项目auto_now_add=True(或等效的Java; I来自Python),安排一个cron来完成并删除任何旧的东西?

据我所知,数据存储区应该高度可用于并发读取和写入。

你也可以考虑离开AppEngine。 Redis听起来像是您正在描述的工作的正确工具,AWS上的Elastic Beanstalk可能很好地满足您的需求。当然,要设置好东西会更加努力,但可能不会如此。