[英]Storing a list of objects on appengine across all instances
我在Google App Engine上有一個應用程序。 它可以處理實時數據,而無需考慮過去的數據(因此不需要數據存儲/完全持久性),因此,在實例崩潰或新部署的情況下,我不需要任何非常可靠的方法來恢復數據。
由於負載,我有多個實例,它們需要共享一個對象列表。 我調查了memcached,但這需要在映射樣式的界面中從鍵到對象的映射,而不能轉儲所有條目。
另外,我希望使這些條目有效,除非“顛簸”,盡管可以在用戶代碼中處理。
什么不涉及數據存儲的合理解決方案? 我希望它能夠處理來自多個App Engine實例的並發讀寫(這就是為什么簡單的Java對象聲明無法按實例運行的原因)。
Memcached可能存儲單個對象,但是需要獲取該對象,獲取某種鎖,對其進行修改並將其寫回到緩存中。
注意:永久的App Engine數據存儲中沒有不相關的數據。
澄清:我需要所有實體。 實體本身可以隨時修改,可以通過過期或半自動刪除,也可以從頭開始創建。 我不是特別有能力前往可計費的后端。
編輯:是的,它將與本地存儲的單個列表一起使用,但是我希望需要多個實例的地方會出現峰值。 我至少需要盡力而為的方法來獲取完整列表,盡管我不介意延遲同步。 但是,在沒有后端的情況下,所有實例之間的循環通信將相對不可擴展,而我將更多地局限於那里的“服務器租用”方案。
我不在乎更改是否不能在另一個前端實例上提交更改后立即通過。 但是,這些更改需要使其具有100%的確定性。 我只看到增加lastSeen值(長整數)的插入和更新。 更新也應復制或反映在所有實例上。
注意:由於當時我無法控制,我無法授予賞金,因此退還了賞金。 如有可能,我會重新添加。
這里的數據存儲有什么問題?
如果您擔心在數據庫中有很多項目會花費太多,那么只需將每個項目保存在帶有datetime_created
字段的auto_now_add=True
(或Java等效項;我來自Python)中,然后安排cron通過刪除舊的東西嗎?
據我所知,該數據存儲區應該可用於並發讀寫。
您可能還考慮僅退出AppEngine。 Redis聽起來像是您所描述的工作的正確工具,並且AWS上的Elastic Beanstalk可能在那里很好地滿足了您的需求。 當然,要進行設置會付出更多的努力,但是可能不會壓倒性的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.