2011-06-02 63 views
0

嘿,我想爲我們的登臺服務器編寫一些代碼,通過遍歷數據庫中的每個模型來「快照」GAE數據庫,並以可恢復的方式對其進行序列化/反序列化。Google App Engine:快照數據庫?

這不一定是線程安全的,它純粹用於演示等事情,我們很樂意在高複製數據庫上運行它。

會有非常數據庫中的小數據,只是足以運行一個演示,所以它可以是一個非常骯髒的黑客。

回答

1

爲什麼你不能只使用標準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> 

我我不能完全確定它是否能及時給你一個快照(例如,如果它阻止了所有新的寫入,直到它完成),我敢冒險說'不',但如果你真的需要一個真正的快照,你可以禁用應用程序中的寫入操作,獲取數據,然後重新啓用它(儘管如何做到這一點可能有點複雜)。

+0

看起來像這樣會爲提問者工作。如果只是需要備份的特定型號,則可以修改此腳本以執行此操作:https://gist.github.com/882011 – Calvin 2011-06-02 20:24:29

+0

2013更新:此解決方案僅適用於主從數據存儲。 – 2013-01-31 05:29:26

0

這聽起來像一個「寫我的代碼爲我」的問題......

給你一個簡短的回答,請隨時通過你的模型運行一個for循環(因爲你說有沒有很多的數據存儲)並將所有內容保存爲例如json字符串或您可以輕鬆恢復的內容。

+0

我不能做一個Model.all()(它不返回結果),所以我不得不列出每個我想要手動存儲的模型,對吧? – user358829 2011-06-02 18:43:31

+0

其實這是一個很好的問題。我的答案完全忽略了這個方面,因爲我不知道自己的答案,假設你的模型是硬編碼的,因此可以在腳本中手動命名。 – 2011-06-02 18:50:13