我使用Google App Engine和Objectify並希望每5分鐘刪除一些數據庫中的條目。什麼是實現這一目標的最佳方式?我應該使用Google App Engine的ThreadManager還是cron作業?還是有另一種方式?定期刪除對象中的條目
回答
Cron聽起來像適合這裏的要求,但我擔心需要刪除的實體的規模。 (根據評論每五分鐘高達幾十萬)。刪除很多實體需要相當長的時間,最有可能超過五分鐘的時間,甚至可能超過前端cron處理程序的10分鐘截止時間。
一個可能的解決方案是從backend instance刪除,因爲後端可以在沒有任何最後期限的情況下運行。 Crons可用於啓動一個查詢待刪除實體的進程,使用僅鍵查詢獲取其密鑰,然後刪除多個background threads中的實體。
由於進程可以無限期運行,因此線程報告刪除完成後,您可以立即查詢並刪除下一組實體。您可以在後端使用全局內存中的鎖,以確保後續的cron請求不會踢出單獨的進程,但會在檢測到進程已經運行時靜靜地退出。所以在這裏,cron僅用作刪除過程的保持活動信號。
請注意,在數據存儲操作成本方面,頻繁查詢和刪除此實體的實體可能過於昂貴。
好的謝謝!我將重新思考我的實現 –
我不相信這會起作用,因爲您無法從單個實例獲得足夠的數據存儲操作吞吐量。唯一可行的方法是通過map/reduce,並且在數據存儲操作中至少需要花費150美元/天。更多如果你想讀取數據......並且有時間問題。 – stickfigure
@stickfigure:謝謝傑夫,我也想知道吞吐量。儘管我喜歡mapreduce,但我不知道它是否提供了提問者所需的細粒度控制。 (我們之前在[這裏]討論過它(http://stackoverflow.com/questions/15976406/objectify-and-timertask-no-api-environment-is-registered-for-this-thread?lq=1))如果是我的應用程序,我會使用某種主人模式來分配加載和刪除,但與完全改變實施策略相比,這可能有點矯枉過正。 –
聽起來像你想,每5分鐘,到:
- 寫實體成千上萬
- 聚集成千上萬的實體
- 刪除實體成千上萬
用map/reduce可以做到這一點。但是,這將很昂貴(每天數百美元),並且您將遇到計時問題 - 特別是在任務隊列備份時。
您應該強烈考慮將此數據存儲在GAE之外。獲取Google Compute Engine帳戶並在那裏設置mongodb或redis實例。甚至在AWS上託管它。 GAE不適合這種工作負載,但它不是「全部或全部」 - 您可以輕鬆地使用雲中其他部分的服務。
好的,謝謝!我會研究它 –
- 1. 如何刪除對象中的條目
- 2. 刪除對象陣列條目
- 3. 的JavaScript對象的數組中刪除單個條目
- 4. 中刪除條目
- 5. 刪除表中的特定條目
- 6. 刪除特定條目
- 7. 刪除陣列中的對象項目
- 8. 刪除LD_LIBRARY_PATH中的條目
- 9. 刪除條目
- 10. 如何從陣列對象中刪除重複條目
- 11. 從json或對象中刪除空條目
- 12. Softlayer對象到期日期自動刪除對象的存儲
- 13. 根據給定的條件從ArrayList中刪除對象
- 14. 從數組對象中移除條目
- 15. 從對象集合中刪除項目
- 16. 刪除圖例中的特定對象
- 17. 刪除特定對象中的NSDictionary
- 18. 從日期中刪除Java中的ArrayList中的多個條目
- 19. 刪除Arraylist中與刪除方法中的對象對應的所有項目
- 20. 從json對象中刪除特定的項目
- 21. 如何刪除特定的mysql條目?
- 22. 刪除特定的CName條目[PowerShell]
- 23. 從db中刪除條目
- 24. 從表中刪除條目
- 25. 從表中刪除條目
- 26. Primefaces DataTable - 用對話框刪除刪除錯誤的條目
- 27. 刪除雙條目
- 28. 刪除條目JOIN
- 29. 刪除項目對象的JavaScript
- 30. 如何在條件刪除JSON對象
每五分鐘打算刪除多少個條目? –
@IbrahimArief:很多人,也許幾十萬?或者有沒有辦法讓這些條目自動失效? –
這是巨大的。自動過期共享數據的唯一方法是在Memcache中使用[expiration](https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/memcache/Expiration)選項你做一個[put operation](http://bit.ly/10S6xve),但是你的數據會是暫時的。刪除成千上萬的經常會非常昂貴的實體,你確定它的規模? –