1

我試圖做我的讀取和GAE儘可能有效寫越好,我想知道這是最好的下面兩個選項。谷歌應用程序引擎的查詢opimization

我有一個網站,用戶可以發佈不同的事情,現在,每當我想表明該用戶我與該用戶的用戶ID的所有帖子查詢所有帖子,然後我顯示出來。將所有帖子ID存儲在用戶實體中並執行get_by_id(post_ID_list)以返回所有帖子會更好嗎?或者那個額外的空間被用完不值得嗎?

是否有任何地方,我可以找到更多類似這樣的信息來優化我的web應用程序?

謝謝!

回答

1

你想存儲的ID列表將讓你可以分別得到每個實體的一致性較好的主要原因 - 實體按編號與數據存儲中的最新版本相一致,而查詢是最終一致。

檢查數據存儲成本,並優化成本: https://developers.google.com/appengine/docs/billing

過得去實體按鍵也不會有任何不查詢所有職位便宜。該查詢使用索引。

如果您使用投影查詢,您可以降低成本。

0

有幾種情況。

首先,如果你跟蹤用戶帖子的所有ID。您必須使用實體組來保持一致性。這意味着寫入數據存儲的速度將爲每秒1個實體。對於帶有ID和1個實體讀取的對象,成本爲1讀。

二,如果你只是使用查詢。這不需要一致性。每檢索一次實體,費用爲1次讀取+ 1次讀取。

第三,如果您僅查詢密鑰並在提取後。成本爲1讀取+每個檢索到的小鍵值爲1。看這個:Keys-Only Queries。這等於投射尋求成本。

如果你有很多的結果,並使用分頁,那麼你需要使用Query Cursors。這可以防止無用的數據存儲。

最經濟的解決方案是第三種情況。看這個:Batch Operations

0

如果你有一個id列表,因爲它們是與你的實體一起存儲的,你可以調用ndb.get_multi(在你使用NDB的情況下,但它會與使用memcache緩存單個實體的其他框架相似)如果與密鑰相關的所有(或大部分)實體都已在數據存儲中,則會爲您節省更多數據存儲調用。

因此,在最好的情況下(一切都在memcache中),數據存儲在使用查詢時根本不會被觸及。

看到這個問題的討論和注意事項:http://code.google.com/p/appengine-ndb-experiment/issues/detail?id=118