【发布时间】:2011-12-03 12:03:28
【问题描述】:
有关上下文的一些背景信息:我正在构建一个包含大约六种核心对象(用户、种类、事件、标签、图像和信任)的应用程序(iOS + android)。用户可以创建新用户,然后与其他用户共享这个新用户(例如,父母可以创建一个孩子,并邀请另一个用户对这个孩子采取行动)。
对于每个用户,一个人可以(给定足够的权限,由 Trust 对象表示)添加包含零个或多个标签以及零个或多个图像的新事件。每个事件也是“类”的一部分(它属于某种“种类”,由 Kind 对象表示)。
事件有一个时间戳(java.util.Date),因此它们可以按时间顺序显示给用户,并且所有对象都包含一个“修改”的时间戳。
我在应用引擎上使用 Java,但我相信这个问题是一般性的。此外,没有对象嵌入到其他对象中,只有键(即 Event 对象具有 Image 键列表,而不是 Image 对象)。
现在,挑战在于:如何以有效的方式检查数据存储中所有这些类型的更新?我幼稚的原型实现是这样的:在移动设备上,我目前每隔一段时间(当前每五分钟或每当用户向服务器发送更新时)轮询服务器,检查信任列表以找到轮询器可以看到的用户,对于每种类型(用户、种类、事件、标签、图像、信任),向数据存储询问与此用户相关的对象,这些对象的修改日期比上次轮询的时间更近。这显然是对数据存储区的太多调用。
如果应用引擎数据存储存在“热平板电脑”问题(参见http://ikaisays.com/2011/01/25/app-engine-datastore-tip-monotonically-increasing-values-are-bad/),我如何有效地向服务器请求更新,因为我上次检查过?显然,添加时间戳会导致瓶颈。然而,我想用自上次询问以来所做的更改来更新移动客户端。 (我知道这个瓶颈不太可能影响我在这个项目上,但我在 3 月份有另一个项目,这可能会成为一个真正的问题。)
总而言之,问题是:使用应用引擎使用新的/修改的数据更新移动客户端的最佳做法是什么?
感谢您阅读我的文字墙,我希望我已经设法以一种易于理解的方式传达了这个问题及其上下文。
前动画,
- 亚历山大。
【问题讨论】:
-
您真的不必担心这里的平板电脑很热。对于包含时间戳为“热”的索引行的平板电脑,您必须在持续的一段时间内每秒写入数千(可能是数万)行。
标签: google-app-engine mobile google-cloud-datastore