アプリケーションを 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 エンティティが存在する場合があります。1 つの ServiceRequest があり、複数の技術者が必要な場合は、メインの ServiceRequest を親として追加の ServiceRequest を作成します。このデータがクエリ/表現される方法に関するいくつかの他の理由を含め、祖先クエリは非常に簡単であるため、最初はこの方法で問題に取り組みました。
子 ServiceRequests を持たないServiceRequest エンティティを照会する方法を考えられる人はいますか?
ありがとう!