Google App Maker 将记录保存到数据库每条记录需要 240 毫秒

Google App Maker saving records to DB is taking 240ms per record

我们有一个 Google App Maker 应用程序使用 Google Cloud SQL 表格。我们的位置是中欧的布拉格,保存一条记录至少需要 240 毫秒。

看起来 Google App Maker 在我的位置附近有一个代理(延迟约 20 毫秒)。然而,我们在 US-Central1 中设置的实例(Google 推荐为 Google App Maker 应用程序提供最佳性能)显示 ~120ms ping。

我们尝试了很多方法,包括将实例位置更改为德国法兰克福(~25 毫秒)。在这种情况下,它花费了更长的时间(每条记录 500 毫秒)。我们的查询似乎是通过这种复杂的方式进行的: 我们的位置(代理)→ 美国(Google App Maker master)→ 法兰克福(SQL 实例)

我们非常绝望,因为目前我们负担不起从 Google App Maker 迁移的费用。我坚信这在现在或将来都有一些解决方案。

我的资源: db-f1-micro(vCPU:1),内存:614.4 MB,存储容量:10 GB 数据库版本:MySQL 2nd Gen 5.7,实例区域:us-central1-a 连通性:Public IP,我的位置:捷克共和国布拉格

function serverSaveData() {  
  var recordData = [];
  recordData[0] = ['NewField_String']
  recordData[1] = ['NewField1_String'];

  for (var i = 0 ; i < recordData.length; i ++) {
    var newProduct = app.models.testDB.newRecord();
    newProduct.NewField = recordData[i][0];
    newProduct.NewField1 = recordData[i][1];
    var time = new Date().toString();
    app.saveRecords([newProduct]);
    console.log('Product saved: ' + time);
  }

}

我们需要的速度最大为每条记录 25 毫秒(实际速度的十分之一)。我们有 10000 种产品,导入应该不会超过几分钟。

请问各位大神有什么解决办法吗,或者有没有办法把记录批量保存到数据库中?非常感谢!

App Maker 有起有落,您只需要找到解决问题的方法。我刚刚处理了一个包含超过 50 万条记录的庞大数据库的导入,这是一个相当大的挑战。

对于您的情况,我建议您分批保存项目以加快处理速度。我觉得分批存2000条记录应该就够了。

你可以这样做:

function saveData(){

    //get the data
    var data = getData();

    var totalRecords = data.length;
    var batchLimit = 2000;
    var totalRounds = Math.ceil(totalRecords / batchLimit);
    var round = 1;
    var roundlimit = batchLimit;
    var currentItem = 0;

    do{
        var recordsToSave = [];
        for(var i=currentItem; i<roundlimit; i++){
            var recordData = data[i];
            var newProduct = app.models.testDB.newRecord();
            newProduct.newField = recordData.newFielddData;
            newProduct.newFiled2 = recordData.newField2Data;
            recordsToSave.push(newProduct);
        }
        if(recordsToSave.length){
            app.saveRecords(recordsToSave);
        }
        currentItem += batchLimit;
        roundlimit += batchLimit;
        round++;

    } while(round <= totalRounds);

}

我使用了与上述类似的解决方案来完成将 680,000 多条记录导入 appmaker。它可能需要更多的调整,但你明白了。至于连接延迟,抱歉,我无能为力。希望 Google App Maker 工程师可以参与进来,但据我现在看来,这是你最好的机会。