超出 Appengine 数据存储区读取操作限制

Posted

技术标签:

【中文标题】超出 Appengine 数据存储区读取操作限制【英文标题】:Appengine Datastore Read Operations limit exceeded 【发布时间】:2016-01-12 12:31:04 【问题描述】:

在没有太多活动的情况下,我不断达到超过读取操作的限制,即 50k 不到两个小时。在数据存储中,我有一个类的大约 200 条记录,其中包含 Java 中短类型的 8 个变量。用户可以在数据存储中的此类中添加新实例。

每次用户访问网站时,我都必须显示结果,以便最多显示 50 000/200 = 250 个用户(通常甚至更少)。

还有其他方法可以持久存储结果吗?也许我可以将 200 条记录合二为一,并在代码中手动解析它们。

我阅读了有关 blobstore 的信息,但我了解它更多的是关于上传文件而不是数据库和查询。我应该使用它。我想将应用程序保留在免费层中。

【问题讨论】:

【参考方案1】:

如果您需要向所有用户显示相同的记录,请将它们保存在 Memcache 中 - 甚至保存在您的实例内存中。

【讨论】:

用户插入数据,因此它不断更新。这是关于从 2 到 6 的某些标准评估一个班级,当标记新的评估时,我需要更新平均值等。 您询问了读取操作 - 您可以通过使用 Memcache 显着减少它们。所有更新、插入等也可以反映在 Memcache 中。 或者,您的数据集非常小,可以放入单个数据存储实体(最大 1MB)或几个实体(如有必要)。只需序列化您的数据并将其存储为一个长字符串。 感谢您的回答,我目前正在实施。【参考方案2】:

如果您使用的是 Java,请查看 Objectify。它具有一级和二级缓存(二级缓存使用 Andrei 推荐的 Memecache)。 Objectify 将帮助您避免重复访问数据存储区——这一切都是开箱即用的,您无需重新编码。只需阅读有关实体对象的@Cache 注释以及Objectify.cache(true) 方法。

【讨论】:

以上是关于超出 Appengine 数据存储区读取操作限制的主要内容,如果未能解决你的问题,请参考以下文章

AppEngine 数据存储区异步放置

put() 后 App Engine 数据存储区中的读取延迟

字符串 IF ELSE 函数超出 Excel 字符数限制?

mondrian.olap.ResourceLimitExceededException:蒙德里安错误:要读取的成员数超出限制(10,000)

数据存储写入操作限制超出

App Engine:如何“重置”数据存储区?