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

Python 高效地过滤具有大量属性值的大量数据存储实体,python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,在我的应用程序引擎数据存储中,我有一个实体类型,它可能包含大量实体,每个实体都有属性“customer_id”。例如,假设一个给定的customer\u id有10000个实体,有50000个customer\u id 我正在尝试有效地过滤这些信息,以便用户一次可以获得至少2000个客户ID的信息。也就是说,在30秒的超时限制内将它们读出到UI,前端将进行进一步的过滤,这样用户就不会一次被所有结果轰炸 下面我列出了当前数据存储模型的视图。”“报告”指的是一组客户ID,因此继续上面的示例,我可以从

在我的应用程序引擎数据存储中,我有一个实体类型,它可能包含大量实体,每个实体都有属性“customer_id”。例如,假设一个给定的customer\u id有10000个实体,有50000个customer\u id

我正在尝试有效地过滤这些信息,以便用户一次可以获得至少2000个客户ID的信息。也就是说,在30秒的超时限制内将它们读出到UI,前端将进行进一步的过滤,这样用户就不会一次被所有结果轰炸

下面我列出了当前数据存储模型的视图。”“报告”指的是一组客户ID,因此继续上面的示例,我可以从ReportCids获取2000个客户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个条目,所以我已经阅读了 -获取所有条目,并在我的代码中进行筛选

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

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

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

考虑到这一点,从你所说的,获取这么多的结果是行不通的

以下是我想做的: 我试图制作一个报告,为多个客户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个客户事件实体的估计相当高,但理论上这是可能发生的。也许当我去获取报告结果时,我可以直接按照用户指定的事件类型进行过滤。这意味着每次他们选择一个不理想的新选项时,我都必须返回数据存储,但考虑到这种设置,这可能是我唯一的选择


非常感谢您花时间看这个

你到底想找回什么?单个报告的所有客户ID,或多个报告的所有客户ID,或一个客户ID的所有报告?如果我没有读错,每个客户ID都链接到10000个实体,您希望获取与2000个客户ID关联的实体。在30秒内获取2000万个实体是行不通的。如果您澄清了您实际想要向最终用户展示的内容,我们可能可以建议不需要获取那么多实体的方式。您将如何以可理解的方式向用户展示2000万条记录?这可能涉及某种聚合——在这种情况下,您需要在写入时进行聚合,并检索预聚合的数据。