【问题标题】:How to implement properly multiple inequality filters on Google App Engine Datastore?如何在 Google App Engine Datastore 上正确实施多个不等式过滤器?
【发布时间】:2016-08-08 10:30:15
【问题描述】:

根据 App Engine 对不等式过滤器的限制,有一些建议可以通过在 RAM 中手动过滤属性来实现高级搜索(通过限制许多属性的范围来过滤结果):

how to effectively run two inequality filters on queries in app engine

那么,在 RAM 中对大型数据集进行如此多的排序和过滤是否可行?是否有任何 Java 示例代码来演示正确的实现?为了避免这个缺点,坚持使用传统的 RDBMS 是个好主意吗?

【问题讨论】:

  • 关系数据库有其自身的缺点,包括复杂查询的性能。所以你不能这样概括——你需要查看特定的项目/数据模型要求。
  • 谢谢@AndreiVolgin。关于第一个问题,您知道如何处理 App Engine Datastore 的多个不等式查询吗?
  • 是的,我已经做了 7 年了 :) 但是你的问题没有一个简单的答案。这完全取决于您的数据模型、数据分布和项目要求。

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


【解决方案1】:

正如 Andrei 所提到的,对于需要多个不等式过滤条件的问题,没有通用的解决方案。这实际上取决于您的数据、查询和应用程序要求。

您可以使用以下一些可能的解决方案:

在应用程序中执行一些过滤。 如果您有两个不等式条件 A 和 B,并且知道满足条件 A 的大多数实体(例如 > 80%)将满足条件 B,然后您可以在不使用条件 B 的情况下对 Datastore 进行查询,并在您的应用程序代码中过滤返回的结果。这让您可以继续使用 Datastore,并且效率不会太差,因为您知道 > 80% 会匹配。

但是,将此解决方案扩展到更多不等式,或者条件 A 和条件 B 之间重叠不大的情况,将导致数据检索效率非常低。

二级搜索索引。如果您有非常复杂的过滤/排序逻辑,您可能会遇到更类似于搜索问题的问题,Google App Engine Search 可能更适合。搜索允许您对搜索索引中的文档运行非常灵活的查询,包括多个不等式查询。

我要指出的是,搜索只提供最终的一致性,并且索引限制为 10GB(但可以根据要求扩展到 200GB)。

【讨论】:

    猜你喜欢
    • 2016-06-21
    • 2011-01-11
    • 1970-01-01
    • 2014-10-04
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 2012-08-26
    相关资源
    最近更新 更多