2013-02-11 102 views
4

我有一個腳本將一個電子表格的內容加載到scriptDB中,但電子表格有大約15,000行,9列,並且一直給我一個「超出最大執行時間」的錯誤。超過最大執行時間的大型數據集

我使用谷歌的文檔中給出的函數加載數據:

function loadDatabaseFromSheet() { 
    var spreadsheet = SpreadsheetApp.openById(SPREADSHEET_KEY); 
    var sheet = spreadsheet.getActiveSheet(); 
    var columns = spreadsheet.getLastColumn(); 
    var data = sheet.getDataRange().getValues(); 
    var keys = data[0]; 
    var db = ScriptDb.getMyDb(); 
    for (var row = 1; row < data.length; row++) { 
    var rowData = data[row]; 
    var item = {}; 
    for (var column = 0; column < keys.length; column++) { 
     item[keys[column]] = rowData[column]; 
    } 
    db.save(item); 
    } 
} 

有什麼辦法加快速度還是我只是將不得不將它分解成幾個大塊千?

+0

ScriptDB已棄用。感謝Phil, – 2017-10-27 18:44:32

回答

4

打電話db.save(item) 15000次是什麼導致緩慢。如果您要保存那麼多的數據,請使用bulk operations

var db = ScriptDb.getMyDb(); 
    var items = []; 
    for (var row = 1; row < data.length; row++) { 
    var rowData = data[row]; 
    var item = {}; 
    for (var column = 0; column < keys.length; column++) { 
     item[keys[column]] = rowData[column]; 
    } 
    items.push(item); 
    } 
    db.saveBatch(items,false); 

調用在最後一次保存操作可以節省您所有的往返時間,所以它超過了最大的執行時間前,這應該加快你的代碼了很多和完成。

+0

工作得很好。我感到有點尷尬,我沒有看到我自己。 – 2013-02-12 06:42:38

+0

這絕對解決了我的問題!但在這裏還有一個問題。我們有類似的東西從數據庫中刪除數據嗎?目前我正在使用[code](https://developers.google.com/apps-script/scriptdb#deleting_all_items_from_the_database)刪除內容。但是,這也是超時,我需要至少運行這個代碼兩次或三次來清理。任何工作? – Srikanth 2013-04-10 11:32:21

+0

您看過[removeBatch方法](https://developers.google.com/apps-script/reference/script-db/script-db-instance#removeBatch(ScriptDbMap,Boolean))嗎? – 2013-04-10 21:32:01