簡體   English   中英

檢查谷歌應用引擎數據存儲區中是否存在實體。

[英]Checking if Entity exists in google app engine datastore.

檢查實體是否存在於Google-app-engine數據存儲區中的最佳/最快方法是什么? 現在我試圖通過鍵獲取實體並檢查get()是否返回錯誤。

我不知道在數據存儲區上獲取實體的過程。 有沒有更快的方法只做這個檢查?

你提出的建議確實是了解你的實體是否存在的最快方法。 減慢速度的唯一因素是獲取和反序列化實體所需的時間。 如果您的實體很大,這可能會讓您失望。

如果此操作(檢查是否存在)是您的主要瓶頸並且您擁有大型實體,則可能需要使用兩個實體來推送您自己的檢查系統 - 首先您將擁有包含數據的現有實體,以及第二個實體或者存儲對真實實體的引用,或者可能是一個空實體,其中鍵只是您可以計算的原始實體鍵的變體。 您可以使用第二個實體快速檢查是否存在,然后僅在需要數據時才獲取第一個實體。

我認為更好的方法就是設計你的密鑰,你知道它們不會重復,或者你的操作是冪等的,這樣即使舊的實體被覆蓋,也沒關系。

com.google.appengine.api已被棄用,轉而使用App Engine GCS客戶端。

你考慮過使用查詢嗎? 猜測和檢查不是一種可擴展的方法來查找數據存儲中存在的實體。 可以創建查詢以從數據存儲中檢索滿足指定條件集的實體:

https://developers.google.com/appengine/docs/java/datastore/queries

編輯:

那么關鍵的查詢怎么樣? 僅鍵查詢比返回完整實體的查詢運行得更快。 要僅返回鍵,請使用Query.setKeysOnly()方法。

new Query("Kind").addFilter(Entity.KEY_RESERVED_PROPERTY, FilterOperator.EQUAL, key).setKeysOnly();

資料來源:[1]: http//groups.google.com/group/google-appengine-java/browse_thread/thread/b1d1bb69f0635d46/0e2ba938fad3a543?pli = 1

您可以使用僅包含一個KeyList<Key>獲取, 該方法返回Map<Key, Entity> ,您可以檢查它是否包含實際值或null ,例如:

Entity e = datastoreService.get(Arrays.asList(key)).get(key);

一般來說,雖然我認為在try / catch中包裝get()更容易,如果捕獲到EntityNotFoundException則返回null

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM