Python 高效地过滤具有大量属性值的大量数据存储实体
在我的应用程序引擎数据存储中,我有一个实体类型,它可能包含大量实体,每个实体都有属性“customer_id”。例如,假设一个给定的customer\u id有10000个实体,有50000个customer\u id 我正在尝试有效地过滤这些信息,以便用户一次可以获得至少2000个客户ID的信息。也就是说,在30秒的超时限制内将它们读出到UI,前端将进行进一步的过滤,这样用户就不会一次被所有结果轰炸 下面我列出了当前数据存储模型的视图。”“报告”指的是一组客户ID,因此继续上面的示例,我可以从ReportCids获取2000个客户IDPython 高效地过滤具有大量属性值的大量数据存储实体,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,因此继续上面的示例,我可以从
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万条记录?这可能涉及某种聚合——在这种情况下,您需要在写入时进行聚合,并检索预聚合的数据。