Оптимизировать запись сценария в таблицу sql - PullRequest
1 голос
/ 10 апреля 2020

Привет! Я использую этот скрипт приложений Google для записи данных в таблицу mysql с использованием соединения jdb c, и в последнее время объем данных в таблицах Google становится большим, и я ищу способы оптимизации сценария. Я запускаю это в пакете из 1000 записей, вызывая хранимую процедуру sql. Хранимая процедура является оператором INSERT INTO TABLE sql. На выполнение каждого пакета уходит примерно 5 минут, а если сценарий выполняется более часа. Процесс автоматически завершается в облаке Google.

var address = 'database_IP_address';
var rootPwd = 'root_password';
var user = 'user_name';
var userPwd = 'user_password';
var db = 'database_name';

var root = 'root';
var instanceUrl = 'jdbc:mysql://' + address;
var dbUrl = instanceUrl + '/' + db;

function googleSheetsToMySQL() {   

  var RecId;
  var Code;
  var ProductDescription;
  var Price;

  var dbconnection = Jdbc.getConnection(dbUrl, root, rootPwd);
  var statement = dbconnection.createStatement();
  var googlesheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('product'); 
  var data = googlesheet.getDataRange().getValues();  

dbconnection.setAutoCommit(false)

for (var i = 1; i < data.length; i++) {
RecId = data[i][0];
Code = data[i][1];
ProductDescription = data[i][2];
Price = data[i][3];

var sql = "{call [dbo].[sp_googlesheetstotable](?,?,?,?)}";
statement = dbconnection.prepareCall(sql);
statement.setString(1, RecId);
statement.setString(2, Code);
statement.setString(3, ProductDescription);
statement.setString(4, Price);
statement.addBatch()
}

statement.executeBatch()
dbconnection.commit()

  statement.close();
  dbconnection.close();
}  
...