分面搜索对GAE数据存储读取的影响

时间:2012-10-03 08:49:04

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

假设我有1000个实体。我希望用户通过这种方式通过分面搜索找到实体:

  1. 用户选择过滤器
  2. 向GAE发送ajax请求
  3. 服务器返回匹配实体的数量
  4. 重复,直到只有几个实体
  5. 换句话说,每个应用的过滤器(只是一个复选框)可能会导致多达1000次读取(后续过滤器的成本会降低,因为返回的实体较少)。 这意味着每天大约10次“搜索”(=应用多个过滤器)可能会耗尽我所有的50k免费读取配额。

    记忆结果实际上不是一个选项:如果我有30个过滤器可以应用,那么存储所有组合将会有2 ^ 30 =“超过十亿”的memcache条目(当所有组合都需要更新时)实体通过首先进行十亿个数据存储区读取来进行更改。

    显然我没有得到什么。我如何有效地缓存或计算结果?

2 个答案:

答案 0 :(得分:2)

不要试图自己实现这一点 - 使用Search API,这是为了在这种情况下有效地返回结果而设计的。

答案 1 :(得分:0)

如果您只有1000个左右的实体,根据您所描述的情况,最好的办法是将所有1000个实体保留在内存缓存中,并在内存而不是数据存储区中运行查询。 1000个实体的内存查询应该非常快。

您可以在存储到memcache之前将实体转换为protobufs。请参阅此link