【问题标题】:Updating data on mobile devices using App Engine (preferably avoiding "hot tablets")使用 App Engine 更新移动设备上的数据(最好避免使用“热门平板电脑”)
【发布时间】: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


【解决方案1】:

(这最初是问题的一部分,但我将其编辑掉,因为它确实是试图回答其中的一部分。)

我相信我可以使用查询游标(参见@​​987654321@)让事情变得更高效。它应该保留对索引中已经到达的位置的引用(根据修改后的时间戳对索引进行排序),因此它可以在该点开始搜索。代价是每个设备存储和传输这个光标。也欢迎对此发表评论(它与如何有效更新客户端的主要问题有关)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多