1

我目前正在尋找備份我的Google App Engine的web應用程序數據存儲的最佳方法。從閱讀中我一直在做,似乎有兩種不同的方式可以做到這一點。我可以通過調用appcfg.py upload_data來使用GAE的bulkloader --application = --kind = --filename = OR我可以進入我的webapp的數據存儲管理部分,選擇我想要備份的實體,然後單擊「備份實體「按鈕。除非我誤解了,否則「備份實體」按鈕將在blobstore中創建我的數據存儲備份,同時使用appcfg.py的download_data將創建本地備份。備份將每週/每月進行一次,主要原因將是萬一webapp的管理員意外刪除重要數據。我並不擔心Google會丟失數據,因此在審查我的問題時不應該考慮到這一點。Google App Engine批量加載器appcfg.py download_data與數據存儲備份實體按鈕

所以我的問題是:這兩種方法哪一種是首選方法?他們哪一個更快,更高效,更便宜等?

在此先感謝您的意見/幫助/答案。

回答

7

這裏有一些因素有,我認爲處理它的最佳解決方案來考慮沿:

開發時間 - 資料儲存庫管理員 - 要利用Bulkloader,你需要編寫腳本,維護備份服務器,存儲等

成本 - 資料儲存庫管理員 - 情況因人而異,但我們的數以千萬計的實體的備份使用的1bil的Ta < 1% sk隊列配額。數據存儲讀取操作和存儲的成本將特定於您的應用程序。但是,在這兩種選擇之間,讀取操作應該是相同的,並且您使用Datastore Admin在Bulkloader for Blobstore存儲($ 0.0043/GB)中交易帶外帶寬($ 0.12/GB)。

備份時間 - 資料儲存庫管理員 - 正如你所期望的那樣,MapReduce的碎片將數據寫入Blob存儲谷歌內部的網絡是不是每次流的實體數據了一個多快得多。使用Datastore Admin完整備份我們的數據需要6小時以上。使用Bulkloader需要3天以上。

備份維護 - Bulkloader(現在) - 隨着Bulkloader和服務器,您可以創建crons定期執行備份和備份維護。例如,我們在Rackspace有一臺服務器,每隔3天備份一次數據存儲,並保留最後2次備份。使用Datastore Admin,您必須手動執行備份並刪除過時的備份,直到發佈自動化解決方案(Issue 7040)。即使是每月備份一次,使用Datastore Admin手動執行備份的成本也非常低,所以我推薦它。

數據靈活性 - Bulkloader - 隨着您可以將所有數據導出到人類可讀的CSV文件,讓你轉動它在Excel中,爲您的本地開發環境創建一個測試數據集,甚至是移動bulkloader您如果您需要,可以使用其他應用程序託管服務(例如:AWS)。

精密還原 - Bulkloader - Bulkloader可以處理恢復選擇實體(在這裏你確切地知道你刪除或改寫哪些實體)和散裝恢復。數據存儲管理員只能對給定種類的所有實體進行批量恢復。

批量恢復 - 資料儲存庫管理員 - 資料儲存庫管理員只更新改變實體非常昂貴寫最小。 Sharding也使得這個過程更爲簡單,比簡單的Bulkloader上傳快得多(儘管您可以自己將csv備份數據分割到多個客戶端上)。

最終Bulkloader爲您提供更精確的控制,同時Datastore Admin簡化並加快批量備份/恢復。即使Datastore Admin是新增功能並且存在一些問題(7076),但鑑於您的情況,我一定會推薦它。

+0

真棒的答案。對不起,在upvote延遲。非常感激! – 2012-03-22 18:43:19

+1

沒有人在這裏提到過,但文檔使它聽起來像bulkloader只適用於現在不贊成的主/從數據存儲? https://developers.google.com/appengine/docs/python/tools/uploadingdata#Downloading_and_Uploading_All_Data ......或者這隻適用於'download_data'命令而不是散裝加載程序? – Anentropic 2012-04-19 11:39:16

+0

appcfg.py的download_data命令肯定適用於高複製數據存儲,而這正是bulkloader用於從數據存儲獲取數據到CSV文件的內容。我沒有看到high_replication_warning,但很有可能你會錯過最近添加的實體,並在你的數據中引用了錯誤。 – 2012-05-09 22:58:49

4

這確實是在本地運行下載操作,逐個實體或使用Map/Reduce在雲中進行導出並下載編譯好的所有軟件包之間的決定。

如果您使用數據存儲管理實用程序,可能會出現故障或損壞的機會 - 個人而言,我一直在使用appcfg下載複雜模式時遇到問題,而且我一直堅持數據存儲管理。

在速度方面 - 數據存儲管理員可以肯定outscale和超越你的本地計算機上,這取決於您如何設置,執行您的數據存儲區管理工作(using task queue rate controlsending tasks to a dedicated backend via the target parameter)的任務隊列。

在成本方面 - 地圖/ Reduce可能會變得非常快貴 - 在您可能預料不到的地方。在一項需要刪除144,000個實體的工作中,最終實現了近1154萬個(!!)數據存儲寫入調用。 appcfg的批量下載程序不會觸及您的寫入配額或任務隊列配額。

效率方面 - 對於AppEngine實例從數據存儲中下載實體並將其放入Blobstore中的實體可能比本地計算機直接下載它快得多。總的來說Map/Reduce也非常有效,特別是在AppEngine上。

問題的答案取決於數據集的大小,預算以及您的耐心等級。 Map/Reduce(通過數據存儲管理)將更加一致和更快,但是根據您的設置可能會花費更多。

+0

有關複雜模式的示例問題,請參閱「AppEngine Bulkloader未下載列表屬性」:http://stackoverflow.com/questions/4327882/appengine-bulk-downloader-is-not-downloading-list-properties – sgammon 2012-03-09 00:00:09

+0

是啊我還將這些列表屬性作爲App Engine的錯誤報告並得到了承認。 http://stackoverflow.com/questions/9089060/attributeerror-list-object-has-no-attribut-has-key-in-app-engine – 2012-03-09 01:49:16

相關問題