0

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

由于负载,我有多个实例需要共享一个对象列表。我查看了 memcached,但这需要映射样式界面中从键到对象的映射,而不能转储所有条目。

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

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

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

注意 现有应用程序引擎数据存储中存在不相关的数据。

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

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

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

注意:由于当时的情况,我无法授予赏金,因此我无法控制赏金已退还。我会在可能的情况下重新添加。

4

1 回答 1

0

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

如果您担心在数据库中有很多项目会花费太多费用,只需将每个项目与一个datetime_created字段一起保存auto_now_add=True(或 Java 等价物;我来自 Python),并安排一个 cron 来执行和删除旧的东西?

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

您也可以考虑直接退出 AppEngine。Redis 听起来像是您所描述的工作的正确工具,AWS 上的 Elastic Beanstalk 可能可以很好地满足您的需求。当然,设置起来需要更多的努力,但可能不是压倒性的。

于 2013-08-14T03:52:31.927 回答