Google数据存储," IN"查询过滤器和分页

时间:2016-02-23 10:23:02

标签: google-app-engine pagination google-cloud-datastore

我们在Google App Engine中运行了一个应用程序,并将数据存储在Google Datastore中。

对于给定的数据存储类型,我们所有的实体都有类型的属性。

我们有兴趣使用 IN查询过滤器运行查询,以便一次获取多个类型,例如:

type in ['event', 'comment', 'custom']

由于此类中有数千个实体,因此需要分页。

我们遇到的问题是数据存储区的一个已知限制是用" IN"过滤器不支持游标。

有没有合理的方法来解决这个限制?

使用偏移量会很省,而且性能不佳。此外,当我们构建API时,我们无法在客户端中获取所有实体和过滤器,因此我们不会自己开发客户端。

任何暗示都会非常感激,谢谢!

1 个答案:

答案 0 :(得分:2)

IN过滤器会对列表中的每个项目进行单独的EQUAL查询。这就是为什么它们不支持游标 - 在您的情况下,在运行IN查询后,索引中将有3个不同的位置。

请考虑向您的实体添加另一个属性,该属性将作为此类API调用的标志:如果类型位于['event','comment','custom'],则其值将为“true”或者,否则为“假”。也许这个标志可能允许你使“索引”属性无法索引 - 这将是一个额外的好处。

使用这个新的索引属性,您可以使用常规的EQUAL过滤器。它会更快(1个查询而不是3个),你可以使用游标进行分页。