0

我正在將應用程序從db轉換爲ndb,並且正在努力提高查詢的效率。隨着數據量的增加,應用程序變得有點慢,導致我們意識到查詢效率非常低。查詢沒有父母的實體

背景:

我們精簡的數據模型與此類似(隨意批評):

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


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

管理員可以 「批准」 一ServiceRequestApplication的ServiceRequest。 ServiceRequestApplications通過父ServiceRequest實例化。如果ServiceRequestApplication獲得批准,則應用程序的密鑰將存儲在請求的應用程序屬性中。

最棘手的部分:

可以有1個實際預約服務(1元技術員)多ServiceRequest實體。我們有一個ServiceRequest,如果需要多個技術人員,我們創建額外的ServiceRequests,並以ServiceRequest爲主。我們最初以這種方式解決了這個問題,因爲祖先查詢會非常容易,其中還包括一些與查詢/表示數據的方式有關的其他原因。

任何人都可以想到的方式來查詢ServiceRequest實體有子女ServiceRequests?

謝謝!

回答

1

在你詢問關於查詢沒有父母的實體的主題;在詢問關於查詢沒有孩子的實體的正文中。不管是哪種情況,答案都是一樣的:標準App Engine索引無法實現。前者要求搜索的東西是而不是存在於鍵中(這是不可能的方式索引結構),後者需要一個連接,因爲它是基於其他實體的屬性(或存在)選擇實體。

取而代之,您將需要進行非規範化:將屬性添加到ServiceRequest,以指示它是否是根實體,或者是否具有子級。