Google App Maker для сохранения записей в БД занимает 240 мс на запись - PullRequest
1 голос
/ 29 марта 2019

У нас есть приложение Google App Maker, использующее таблицы Google Cloud SQL. Наше местоположение - Прага, Центральная Европа, и сохранение одной записи занимает минимум 240 мс.

Похоже, у Google App Maker есть прокси-сервер, расположенный недалеко от моего местоположения (задержка ~ 20 мс). Однако наш экземпляр, настроенный в US-Central1 (который рекомендован Google для обеспечения максимальной производительности приложений Google App Maker), показывает пинг ~ 120 мс.

Мы перепробовали много вещей, включая изменение местоположения экземпляра на Франкфурт, Германия (~ 25 мс). В этом случае это заняло еще больше времени (500 мс на запись). Наши запросы, казалось, обходили этот сложный путь: Наше местоположение (прокси) → США (мастер Google App Maker) → Франкфурт (экземпляр SQL)

Мы в отчаянии, поскольку в настоящее время мы не можем позволить себе перейти от Google App Maker. И я твердо верю, что у этого есть какое-то решение или сейчас, или в будущем.

Мои ресурсы: db-f1-micro (vCPU: 1), память: 614,4 МБ, объем памяти: 10 ГБ Версия базы данных: 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 товаров, а импорт не должен занимать более нескольких минут.

Ребята, не могли бы вы найти какое-нибудь решение или есть способ сохранить записи в базе данных в большом количестве? Большое вам спасибо!

1 Ответ

2 голосов
/ 29 марта 2019

App Maker имеет взлеты и падения, и вам просто нужно найти обходные пути для падений. Я имел дело с импортом огромной базы данных, содержащей более полумиллиона записей, и это было довольно сложно.

В вашем случае я бы рекомендовал сохранять элементы партиями для ускорения процесса. Я думаю, что сохранения записей 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 сможет сделать это, но, насколько я понимаю, это ваш лучший шанс.

...