2016-11-03 75 views
1

雖然Google Cloud Client Library具有許多內置功能,但在查詢基於其ID的實體存在時,我還沒有找到任何可用的東西。據我所知,做一個關鍵的查詢要比實體查詢這樣的效率高得多。存在的GQL查詢:獲取與關鍵查詢與實體查詢

SELECT __key__ FROM User WHERE __key__ = Key(User, 1) 

從Java應用程序中如果可能的話,使用get(Key key)功能就更好了。

Datastore datastore = DatastoreOptions.getDefaultInstance().getService(); 
KeyFactory keyFactory = datastore.newKeyFactory().setKind(User); 
Key key = keyFactory.newKey(1); 
Entity entity = datastore.get(key); 

如果我有這樣的情況:我的實體的祖先,以及,查詢與剛剛父ID祖先的存在時會更有效率三者的? 我假設實體查詢(SELECT * From Parent WHERE __key__ = Key(Parent, 1))總是比關鍵查詢慢,但與get相比怎麼樣?

什麼時候祖先的路徑被鏈接更長? 那麼關鍵的查詢可能會沿着喜歡的東西:

SELECT __key__ FROM Grandchild WHERE __key__ = Key(Parent, 1, Child, 1, Grandchild, 1) 

回答

0

唯一關鍵字查詢速度較快,因爲實體數據沒有被髮送回客戶端。假設您有一個具有N個屬性的實體,並且這些屬性(名稱和值)的大小爲50 KB,如果您執行僅鍵查詢,則通過網絡節省50 KB數據傳輸。

無論您是使用Key-only查詢,基於Key的實體查詢還是Get(key)方法,實體從數據存儲的角度進行實際查找都是相同的,因爲數據存儲只是根據提供了關鍵。總結 - 如果您需要知道的是,如果具有給定鍵的實體不存在,那麼只有鍵的查詢將是您的最佳選擇。

+0

如果我有單獨的種類和標識符該怎麼辦?使用get()方法更好還是構建關鍵字面量/使用參數綁定更好? – Kookz