【问题标题】:Bulk get of child entities on Google app engine?在 Google 应用引擎上批量获取子实体?
【发布时间】:2010-05-08 17:13:09
【问题描述】:

在 Python 中的 Google App Engine 上,我有一个 Visit 实体,其父级为 Patient。一位患者可能有多次就诊。

我需要在某处设置 most_recent_visit(和一些辅助访问数据)以供以后查询,可能在另一个子实体中,Brett Slatkin 可能称之为“关系索引实体”。

我希望以如下方式批量处理:

1. get 100 Patient keys
2. get all Visits that have any of the Patients from 1 as an ancestor
3. go through the Visits and get the latest for each Patient

有什么方法可以批量执行第 2 步吗?

我知道有一种方法可以从键列表中批量获取实体,并且有一种方法可以通过其祖先来匹配单个实体。

【问题讨论】:

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


    【解决方案1】:

    数据存储中无法找到您要查找的查询类型;这是一个联接,不支持。第 2 步将需要 100 个查询。

    您可以在每个 Patient 实体中存储访问键列表,然后能够根据它们的键执行简单的批量获取所有这些实体。

    【讨论】:

      【解决方案2】:

      为什么不在患者对象上维护患者就诊键列表?您已经知道上次访问,因为它将是添加到列表中的最后一个键。

      我的 NF 检测器发疯了,这让我认为这是数据存储的正确解决方案。

      【讨论】:

        【解决方案3】:

        如果您在模型Visit 中设置属性Patient -- 像这样:

        class Patient(db.Model):
            pass
        
        class Visit(db.Model):
            patient_visited = db.ReferenceProperty(Patient)
        

        每个患者实体上都会有这个自动查询属性visit_set,所以你可以这样查询:

        for patient in Patient.all():
            last_visit = patient.visit_set.order('-visited')
        

        这一切都完成了。 只需 101 个查询。挺好的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-09
          • 2013-08-30
          • 1970-01-01
          • 2012-12-15
          • 1970-01-01
          相关资源
          最近更新 更多