使用大量属性值有效过滤大量数据存储区实体

时间:2010-07-23 07:55:31

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

在我的App Engine数据存储区中,我有一个实体类型可能包含大量实体,每个实体都有属性“customer_id”。例如,假设给定的customer_id有10,000个实体,并且有50,000个customer_id。

我正在尝试有效地过滤这一点,以便用户可以一次获得至少2000个customer_id的信息。也就是说,在30秒超时限制内将它们读出到UI(进一步过滤将在前端完成,因此用户不会立即轰击所有结果)。

下面我列出了我当前数据存储模型的视图。 'Reports'指的是customers_ids集,所以继续上面的例子,我可以从ReportCids获得我的2000 customer_ids。

class Users(db.Model):
  user = db.StringProperty()
  report_keys_list = db.ListProperty(db.Key)

class Reports(db.Model):
  #report_key
  report_name = db.StringProperty()

class ReportCids(db.Model):
  report_key_reference = db.ReferenceProperty(Reports, collection_name="report_cid_set")
  customer_id = db.IntegerProperty()
  start_timestamp = db.IntegerProperty()
  end_timestamp = db.IntegerProperty()

class CustomerEvent(db.Model):
  customer_id = db.IntegerProperty()
  timestamp = db.IntegerProperty()
  event_type =  db.IntegerProperty()

我考虑的选项:
- 对我的2000集中的每个customer_in执行单独的查询 - 使用指示客户事件的键列表,但这仅限于列表中的5000个条目(所以我已阅读)
- 获取所有条目,并在我的代码中过滤

如果有人就如何以最有效的方式做到这一点,或者我是以完全错误的方式解决问题,我真的很感激。在有效使用数据存储方面我是新手。

如果有帮助,当然乐意提供任何澄清或信息 非常感谢!

1 个答案:

答案 0 :(得分:0)