Google App Maker将记录保存到数据库的时间为每条记录240ms

时间:2019-03-29 14:11:27

标签: google-cloud-sql google-app-maker

我们有一个使用Google Cloud SQL表的Google App Maker应用。我们的位置在中欧的布拉格,保存一项记录至少需要240毫秒,令人难以置信。

Google App Maker似乎有一个代理靠近我的位置(等待时间约20毫秒)。但是,我们在美国中部1(Google推荐使用此实例来为Google App Maker应用提供最佳性能)中设置的实例显示〜120ms ping。

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

我们非常绝望,因为我们目前无法承受从Google App Maker迁移的风险。我坚信,无论现在还是将来,这种解决方案都可以解决。

我的资源: db-f1-micro(vCPU:1),内存:614.4 MB,存储容量:10 GB 数据库版本:MySQL 2nd Gen 5.7,实例区域:us-central1-a 连接性:公共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);
  }

}

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

请问您有什么解决方法,还是可以将记录批量保存到数据库中?非常感谢!

1 个答案:

答案 0 :(得分:2)

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工程师能够参与进来,但就我目前而言,这是您的最佳选择。