2012-06-14 122 views
1

我正在設計我的應用程序數據模型,我懷疑是否使用父級或簡單索引。Appengine數據存儲父級或索引

Site{ 
    @Id Long id; 
} 

Booking{ 
    @Id Long id; 
    @Index/Parent Key<Site> site; 
    @Index Date date; 
} 

我2個實體預訂網站。關係是網站有很多預訂。 我想在2種方式來檢索預訂:getBookingBySiteAndDate(關鍵部位,時間日期)和getBookingsByDate(日期爲準)

的S *的Econd查詢*是不是有效的,如果我用家長,因爲我需要Booking的網站檢索所有預訂。本網站可能已被刪除。

第一個查詢是沒有效率的,如果我使用指數,因爲我需要(日期,網站)的自定義指數,是昂貴的。由於預訂沒有實體組,因此創作的公寓並不一致,我有1w/s的限制。

您的建議是什麼?

+1

什麼使自定義索引成本高昂?他們非常高效。 –

+0

其他數據存儲寫入是針對您創建的每個自定義索引執行的,因此這就是新成本進入的地方。 – alex

回答

0

我已經在Objectify郵件列表中進行了雙重檢查,並且沒有使用getBookingsByDate和Parent並且沒有站點ID的限制。

他們推薦我的解決方案是使用@Parent,因爲速度更快,並且您不需要Site-Date上的雙重索引。

1

我不會使用父母。我見過的父母唯一的價值是如果你需要創建一個交易組。在你的例子中,我只是將網站的id存儲在預訂表中,併爲getBookingBySiteAndDate查詢創建一個索引。這將是非常快的。索引將自動爲您創建,您不需要額外的工作。