高效地过滤具有大量属性值的大量数据存储实体

2024-04-25 04:52:27 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的appengine数据存储中,我有一个实体类型,它可能包含大量实体,每个实体都有属性“customer_id”。例如,假设一个给定的customer_id有10000个实体,有50000个customer_id。在

我试图有效地过滤这些信息,这样用户一次至少可以获得2000个客户的信息。也就是说,在30秒的超时限制内将它们读出给用户界面(在前端将进行进一步的过滤,这样用户就不会一次收到所有结果)。在

下面我列出了我当前数据存储模型的视图Reports引用一组customer_id,所以继续上面的例子,我可以从ReportCids中获得2000个customer_id。在

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系列中,对每个客户执行单独的查询
-使用指示客户事件的密钥列表,但列表中的条目限制为5000个(因此我已阅读)
-获取所有条目,并过滤我的代码

如果有人能就如何以最有效的方式解决这一问题提供一些建议,或者如果我处理问题的方式完全错误,我将非常感激。在有效地使用数据存储方面,我是个新手。在

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


Tags: 数据用户report实体信息iddbmodel
1条回答
网友
1楼 · 发布于 2024-04-25 04:52:27

谢谢你回复我。看起来我有一个问题,当我发布时使用的帐户,所以我需要在这里的评论回应。在

考虑过这一点,并且根据你所说的,得出这么多结果是行不通的。在

我想做的是: 我正在尝试生成一个报告,为多个客户id显示该组客户发生的事件。所以假设我有一个报告,可以查看2000个客户的信息。我希望能够获取所有事件(CustomerEvent),然后按事件类型筛选。我可能会问很多,但我希望做的是为2000个客户获取所有这些事件,然后在前端进行事件类型筛选,这样用户就可以动态地调整他们想要查找的事件类型,并获得关于该事件类型的成功操作的一些信息。在

所以我的主要问题是有效地从CustomerEvent中获取正确的实体。在

现在,我正在抓取客户ID的列表,如下所示:

cid_list = []  
this_report = models.Reports.get(report_key)  
if this_report.report_cid_set:  
  for entity in this_report.report_cid_set:  
    cid_list.append(entity.customer_id)  

我对10000个CustomerEvent实体的估计相当高,但理论上这是可能的。也许当我去获取报告结果时,我可以直接根据用户指定的事件类型进行筛选。这意味着每次他们选择一个不理想的新选项时,我都必须返回到数据存储,但考虑到这个设置,这可能是我唯一的选择。在

非常感谢您抽出时间来看看这个!在

相关问题 更多 >