google-app-engine - 在 Appengine 数据存储上查询 N 条随机记录

标签 google-app-engine random gql google-cloud-datastore

我正在尝试编写一个 GQL 查询,它返回 N 个特定类型的随机记录。我当前的实现有效,但需要对数据存储进行 N 次调用。如果可能的话,我想对数据存储进行 1 次调用。

我目前为放入数据存储区的每种类型分配一个随机数。当我查询随机记录时,我生成另一个随机数并查询记录 > rand ORDER BY asc LIMIT 1。

这有效,但是,它只返回 1 条记录,所以我需要进行 N 次查询。关于如何进行此查询的任何想法?谢谢。

最佳答案

“在幕后”单个搜索查询调用只能从某个索引返回一组连续的行。这就是为什么某些 GQL 查询(包括对 != 的任何使用)扩展到多个数据存储区调用的原因。

N 个独立的均匀随机选择在任何索引中都不是(通常)连续的。

QED。

您或许可以使用内存缓存来存储实体,并减少获取 N 个实体的成本。或者,如果您不介意“随机”选择在索引中靠近在一起,请在一个查询中选择一个随机选择的 block (比如)100,然后从中随机选择 N。由于您有一个已经随机化的字段,因此对于局外人来说,这 N 个项目是相关的不会立即显而易见。至少,直到他们查看大量样本并注意到项目 A 和 Z 从未出现在同一组中,因为它们在随机索引中相差超过 100。如果性能允许,您可以不时地重新随机化您的实体。

关于google-app-engine - 在 Appengine 数据存储上查询 N 条随机记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1105004/

相关文章:

php - MySQL - 从大表中选择随机行

google-app-engine:查询模型中的字符串属性不会检索结果

mysql - 如何在 GQL(谷歌查询语言)中实现

java - Google App Engine 可以用来驱动桌面应用程序吗?

python - 在 Google App Engine 中部署 Flex 环境时出现错误 : (gcloud. app.deploy) 错误响应:[13]

c - 如何在 C 中生成一个随机 int?

java - 为数组生成随机索引

google-app-engine - 如何在 App Engine 中存储和搜索数据?

google-app-engine - 使用 ndb 获取、修改和放置一批实体的最有效方法

python - 谷歌应用引擎 : get_or_create()?