首页 > 解决方案 > 如何通过 JDBC 有效地将批处理请求发送到 Google App Script 中的 MySQL 数据库?

问题描述

我正在 Google App Maker 中构建一个应用程序,该应用程序接收用户输入的 Excel CSV 文件,该文件具有 3 列和 370,573 行,因此总共有 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 文件输入所有数据条目时所花费的总时间,而不仅仅是电子表格的一小部分?

标签: mysqlgoogle-apps-scriptgoogle-app-maker

解决方案


如果这是一次性导入,我会使用应用程序制造商的原生导入功能。创建一个与您的 cvs 文档结构相匹配的数据模型。然后在谷歌表中打开 csv。确保格式与数据模型匹配,并且字段和列名完全匹配,然后使用应用程序制造商屏幕左上角的导入功能。选择谷歌表和您创建的数据模型,然后单击导入。这应该让您的数据加载它仍然需要一些时间,因为 1M 项目很多。我看到这是 10 个月大,所以当时可能还没有。

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


推荐阅读