嘿,我想爲我們的登臺服務器編寫一些代碼,通過遍歷數據庫中的每個模型來「快照」GAE數據庫,並以可恢復的方式對其進行序列化/反序列化。Google App Engine:快照數據庫?
這不一定是線程安全的,它純粹用於演示等事情,我們很樂意在高複製數據庫上運行它。
會有非常數據庫中的小數據,只是足以運行一個演示,所以它可以是一個非常骯髒的黑客。
嘿,我想爲我們的登臺服務器編寫一些代碼,通過遍歷數據庫中的每個模型來「快照」GAE數據庫,並以可恢復的方式對其進行序列化/反序列化。Google App Engine:快照數據庫?
這不一定是線程安全的,它純粹用於演示等事情,我們很樂意在高複製數據庫上運行它。
會有非常數據庫中的小數據,只是足以運行一個演示,所以它可以是一個非常骯髒的黑客。
爲什麼你不能只使用標準bulkloader?你可以告訴它來下載所有類型的所有實體,所以你不必知道他們的名字先驗:
appcfg.py download_data --application=<app-id> --url=http://<appname>.appspot.com/[remote_api_path] --filename=<data-filename>
以及上傳你可以做反向:
appcfg.py upload_data --application=<app-id> --kind=<kind> --filename=<data-filename> <app-directory>
我我不能完全確定它是否能及時給你一個快照(例如,如果它阻止了所有新的寫入,直到它完成),我敢冒險說'不',但如果你真的需要一個真正的快照,你可以禁用應用程序中的寫入操作,獲取數據,然後重新啓用它(儘管如何做到這一點可能有點複雜)。
這聽起來像一個「寫我的代碼爲我」的問題......
給你一個簡短的回答,請隨時通過你的模型運行一個for循環(因爲你說有沒有很多的數據存儲)並將所有內容保存爲例如json字符串或您可以輕鬆恢復的內容。
我不能做一個Model.all()(它不返回結果),所以我不得不列出每個我想要手動存儲的模型,對吧? – user358829 2011-06-02 18:43:31
其實這是一個很好的問題。我的答案完全忽略了這個方面,因爲我不知道自己的答案,假設你的模型是硬編碼的,因此可以在腳本中手動命名。 – 2011-06-02 18:50:13
看起來像這樣會爲提問者工作。如果只是需要備份的特定型號,則可以修改此腳本以執行此操作:https://gist.github.com/882011 – Calvin 2011-06-02 20:24:29
2013更新:此解決方案僅適用於主從數據存儲。 – 2013-01-31 05:29:26