如何通过JDBC将批处理请求有效地发送到Google App脚本中的MySQL数据库中?

时间:2018-06-26 00:15:34

标签: mysql google-apps-script google-app-maker

我正在Google App Maker中构建一个应用程序,该应用程序将接收用户输入的具有3列和370,573行的Excel CSV文件,因此共有1,111,719个数据值。我正在尝试通过发送批处理请求将这些数据有效地输入到MySQL数据库中。但是,我不确定如何适当地优化此过程以最大程度地减少花费的时间。 这是我目前正在完成的过程:

var file = DriveApp.getFileById(fileID);
var data = Utilities.parseCsv(file.getBlob().getDataAsString());
var stmt = conn.prepareStatement('INSERT INTO report '
   + '(createdDate, accountFullID, lsid) values (?, ?, ?)');
for(var i = 1; i < **data.length**; i++) {
   stmt.setString(1, data[i][0]);
   stmt.setString(2, data[i][1]);
   stmt.setString(3, data[i][2]); 
   stmt.addBatch();
}
var batch = stmt.executeBatch();
conn.commit();
conn.close();

在测试我的代码时,将for循环设置为迭代直到变量i小于500花费了3分钟以上的时间。当我将值设置为5之类的小数字时,花了几秒钟完成。当我将值设置为data.length(因为当前将其设置为粗体)时,它永远不会完成并且因死锁异常而超时。从Excel CSV文件(不仅是电子表格的一小部分)输入所有数据条目时,应如何编辑代码以更有效地执行批处理并减少总的时间?

1 个答案:

答案 0 :(得分:1)

如果这是一次导入,那么我将使用App makers的本机导入功能。创建一个与cvs文档结构匹配的数据模型。然后在Google工作表中打开csv。确保格式与数据模型匹配,并且字段和列名称完全匹配,然后使用应用程序制造商屏幕左上方的导入功能。选择Google工作表和您创建的数据模型,然后单击导入。这应该可以加载您的数据,因为1M项很多,因此仍然需要一些时间。我看到这已经10个月了,所以那时可能还没有空。

https://developers.google.com/appmaker/models/import-export