0

我正在努力将应用程序从 db 转换为 ndb,并且正在努力提高我的查询效率。随着数据量的增加,应用程序变得有点慢,导致我们意识到查询效率很低。

背景:

我们的精简数据模型与此类似(请随意批评):

class ServiceRequest(ndb.Model):
  technician = ndb.UserProperty()
  application = ndb.KeyProperty()  # ServiceRequestApplication kind


class ServiceRequestApplication(ndb.Model):
  applicant = ndb.UserProperty()

管理员可以“批准” ServiceRequest 的 ServiceRequestApplication。ServiceRequestApplications 使用父 ServiceRequest 实例化。如果 ServiceRequestApplication 被批准,则应用程序的密钥存储在请求的应用程序属性中。

棘手的部分:

1 个实际服务预约(每位技术人员 1 个)可以有多个 ServiceRequest 实体。我们有一个 ServiceRequest,如果需要多种技术,我们会创建额外的 ServiceRequest,以主 ServiceRequest 作为父级。我们最初以这种方式解决问题是因为祖先查询非常容易,包括与查询/表示此数据的方式有关的其他一些原因。

谁能想到一种方法来查询没有子 ServiceRequest 的 ServiceRequest 实体?

谢谢!

4

1 回答 1

1

在主题中,您询问查询没有父母的实体;在正文中,您询问有关查询没有孩子的实体的问题。不过,无论哪种情况,答案都是相同的:标准 App Engine 索引无法做到这一点。前者需要搜索键中存在的东西(这不可能是索引的结构方式),而后者需要连接,因为它根据其他实体的属性(或存在)选择实体。

相反,您需要进行非规范化:向 ServiceRequest 添加一个属性,以指示它是否是根实体,或者它是否有子实体,视情况而定。

于 2012-05-02T00:44:49.063 回答