2 votes

La sauvegarde des enregistrements de Google App Maker dans la base de données prend 240 ms par enregistrement

Nous avons une application Google App Maker qui utilise les tables SQL de Google Cloud. Nous sommes à Prague, en Europe centrale, et la sauvegarde d'un enregistrement prend au minimum 240 ms.

Il semble que Google App Maker dispose d'un proxy à proximité de mon emplacement (latence ~20ms). Cependant, notre instance configurée en US-Central1 (qui est recommandée par Google pour fournir aux applications Google App Maker les meilleures performances) montre un ping de ~120ms.

Nous avons essayé plusieurs choses, y compris de changer l'emplacement de l'instance à Francfort, en Allemagne (~25 ms). Dans ce cas, cela a pris encore plus de temps (500 ms par enregistrement). Nos requêtes semblent faire des allers-retours compliqués : Notre emplacement (proxy) US (maître Google App Maker) Francfort (instance SQL)

Nous sommes désespérés car nous ne pouvons pas nous permettre de nous éloigner de Google App Maker pour le moment. Et je crois fermement qu'il existe une solution, maintenant ou à l'avenir.

Mes ressources : db-f1-micro (vCPUs : 1), Mémoire : 614.4 MB, Capacité de stockage : 10 GB Version de la base de données : MySQL 2nd Gen 5.7, Zone d'instance : us-central1-a Connectivité : Public IP, Ma localisation : Prague, République Tchèque

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);
  }

}

Nous avons besoin que la vitesse soit au maximum de ~25ms par enregistrement (un dixième de la vitesse réelle). Nous avons 10000 produits et l'importation ne doit pas prendre plus de quelques minutes.

Avez-vous une solution ou existe-t-il un moyen d'enregistrer des enregistrements en masse dans la base de données ? Merci beaucoup !

2voto

Morfinismo Points 2313

App Maker a des hauts et des bas et vous devez juste trouver des solutions de contournement pour les bas. Je viens de m'occuper de l'importation d'une énorme base de données qui contenait plus d'un demi-million d'enregistrements et c'était un vrai défi.

Dans votre cas, je vous recommande de sauvegarder les éléments par lots pour accélérer le processus. Je pense que la sauvegarde des enregistrements par lots de 2000 devrait suffire.

Vous pouvez faire quelque chose comme ça :

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);

}

J'ai utilisé une solution similaire à celle ci-dessus pour terminer l'importation de plus de 680 000 enregistrements dans appmaker. Il se peut qu'il faille la modifier un peu plus, mais vous voyez l'idée. Quant à la latence de la connexion, je suis désolé de ne pas pouvoir vous aider. J'espère qu'un ingénieur de Google App Maker pourra vous aider, mais d'après ce que je vois actuellement, c'est votre meilleure chance.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X