根据App Engine对不等式过滤器的限制,有一些建议可以通过在RAM中手动过滤属性来实现高级搜索(通过限制许多属性的范围来过滤结果):
how to effectively run two inequality filters on queries in app engine
那么,在大型数据集的RAM中进行这样的排序和过滤是否可行?是否有任何Java示例代码来演示正确的实现?为了避免这个缺点,坚持使用传统的RDBMS是个好主意吗?
答案 0 :(得分:1)
正如Andrei所提到的,对于需要多个不等式过滤条件的问题,没有一般解决方案。这实际上取决于您的数据,查询和应用程序要求。
以下是您可以使用的一些可能的解决方案:
在应用程序中执行一些过滤。如果您有两个不等式条件A和B,并且知道满足条件A的实体的大多数(例如> 80%)将满足条件B ,然后您可以在没有条件B的情况下针对数据存储区进行查询,并在应用程序代码中过滤返回的结果。这使您可以继续使用数据存储区,效率不会太差,因为您知道> 80%将匹配。
然而,将此解决方案扩展到更多不等式,或者条件A和条件B之间的重叠不是很大的情况,将导致数据检索效率非常低。
次要搜索索引。如果你有非常复杂的过滤/排序逻辑,你可能会有更类似于搜索问题的东西,Google App Engine Search可能是更适合的。搜索允许您对搜索索引中的文档运行非常灵活的查询,包括多个不等式查询。
我将指出搜索只提供最终的一致性,索引限制为10GB(但可以根据要求扩展到200GB)。