2012-07-10 94 views
1

如果我有一個關鍵任務數據庫,需要定期備份,並將它作爲scriptdb存儲在GAS中,有什麼方法可以備份實際的數據庫文件嗎?看起來db是以一種使腳本在腳本之外不可見的方式嵌入的?如何備份Google Apps腳本的scriptdb

回答

1

我想我在上面找到了一個像樣的解決方案,在一個意想不到的地方。我可以使用Google Fusion Table/s - 而不是使用scriptdb,它們具有SQL類型的訪問權限,是可以導出,備份,查看等的具體文檔,可以充當我的應用的數據存儲區...

3

那麼,你可以隨時查詢你所有的值和JSON.stringify他們。 如果您需要從中恢復數據庫,我可以注意到的唯一區別是每個項目ID都會改變。

下面是一個例子:

function backupDB() { 
    var db = ScriptDb.getMyDb(); 
    var res = db.query({}); 
    var array = []; 
    while(res.hasNext()) 
    array.push(res.next().toJson()); 
    var dbString = JSON.stringify(array); 
    Logger.log(dbString); //you'll obviously save this string somewhere else e.g. as a docs file 
} 

您可能還需要做到這一點的塊,因爲你的數據庫可能有太多數據的腳本來處理一次,像這樣。

我也覺得這個「備份」過程也應該由API來照顧。上面的代碼只是我的一個想法。

+0

是的,這是一個很好的解決方法,但我希望Apps腳本將有更多的東西嵌入。如果人們將要將關鍵數據委託給scriptdb,那麼只能以強大而經常的方式對其進行備份 – BruceM 2012-07-10 15:17:55

+1

讓代碼自動備份數據(例如,使用時間驅動的觸發器)似乎很棒對我來說很強大,如果你有一些關鍵的應用程序腳本運行,那麼你應該是一個足夠好的開發人員來寫一個「關鍵」的備份。但是,是的,更「嵌入」的東西確實是非常好的。現在,如果你認爲這是一個「增強請求」而不是一個真正的問題,那麼你就錯了。你應該在[Apps Script Issue Tracker]中提交一個。(http://code.google.com/p/google-apps-script-issues/issues/list) – 2012-07-10 18:53:06

+0

如果你遵循良好的做法來創建,使用和依賴在您的腳本創建的ID重新導入將沒有副作用。 – Luciano 2012-10-01 16:35:55

0

也許您可以將關鍵數據從scriptdb複製到Google Spreadsheet。鑑於其在谷歌開發人員的例子,我認爲這是一個有趣的選擇。

這是鏈接:Copy a Database to a New Sheet in a Spreadsheet

+0

是的,又一個很好的解決方法... – BruceM 2012-07-10 18:41:56

1

實際的答案是:你不存儲在ScriptDb的關鍵任務數據,原因是多方面的:

  1. appscript沒有SLA。谷歌有許多其他存儲有確保。
  2. 由於該數據庫不支持事務,因此無法保證批處理可能會處理兩次相同的數據(如果腳本在塊備份或還原過程中失敗)。
  3. 如果將ID存儲在數據庫中的其他對象內,它會變得複雜。