App Engine + Cloud Datastore 性能:查询顺序还是内存顺序?
App Engine + Cloud Datastore performance: order in query or in memory?
关于 Google App Engine + Datastore 的问题。我们有一些带有多个相等过滤器的查询。为此,我们不需要保留任何组合索引,Datastore 会自动维护这些索引,如 here.
所述
The built-in indexes can handle simple queries, including all entities of a given kind, filters and sort orders on a single property, and equality filters on any number of properties.
但是,我们需要根据这些属性之一对结果进行排序。我可以在数据存储区查询中使用 .sort("prop") 来做到这一点(使用 Objectify),这需要我添加一个复合索引,并且一旦部署就会形成一个巨大的索引。我看到的替代方法是检索无序列表(结果集中最多 100 个实体),然后在内存中对它们进行排序。
由于我们的实体实现了 Comparable,我可以简单地使用 Collections.sort(entities)。
我的问题很简单:想要哪一个?即使数据存储复合索引的性能更高,是否值得创建所有这些索引?
谢谢!
这取决于你对"desired"的定义。 IMO,如果你知道结果集是 "manageable" 大小,我会在内存中排序。加很多索引会影响成本,可以先做成本分析看看。
没有正确或错误的方法 - 解决方案取决于您的要求。有几个因素需要考虑:
额外的索引占用 space 并且在存储成本和写入成本方面成本更高 - 您必须在每次更新实体时更新每个索引。
在 属性 上排序更快,但对于较小的结果集,差异可以忽略不计。
您可以将排序后的结果存储在 Memcache 中,避免在每次请求时都对它们进行排序。
如果没有复合索引,您将无法使用分页,即您每次都必须检索所有结果进行内存排序。
关于 Google App Engine + Datastore 的问题。我们有一些带有多个相等过滤器的查询。为此,我们不需要保留任何组合索引,Datastore 会自动维护这些索引,如 here.
所述The built-in indexes can handle simple queries, including all entities of a given kind, filters and sort orders on a single property, and equality filters on any number of properties.
但是,我们需要根据这些属性之一对结果进行排序。我可以在数据存储区查询中使用 .sort("prop") 来做到这一点(使用 Objectify),这需要我添加一个复合索引,并且一旦部署就会形成一个巨大的索引。我看到的替代方法是检索无序列表(结果集中最多 100 个实体),然后在内存中对它们进行排序。
由于我们的实体实现了 Comparable,我可以简单地使用 Collections.sort(entities)。
我的问题很简单:想要哪一个?即使数据存储复合索引的性能更高,是否值得创建所有这些索引?
谢谢!
这取决于你对"desired"的定义。 IMO,如果你知道结果集是 "manageable" 大小,我会在内存中排序。加很多索引会影响成本,可以先做成本分析看看。
没有正确或错误的方法 - 解决方案取决于您的要求。有几个因素需要考虑:
额外的索引占用 space 并且在存储成本和写入成本方面成本更高 - 您必须在每次更新实体时更新每个索引。
在 属性 上排序更快,但对于较小的结果集,差异可以忽略不计。
您可以将排序后的结果存储在 Memcache 中,避免在每次请求时都对它们进行排序。
如果没有复合索引,您将无法使用分页,即您每次都必须检索所有结果进行内存排序。