0

Ich führe Parse-Server v2.2.12 aus und versuche einen Job auszuführen, der ein riesiges Dataset (~ 13k Datensätze) abruft, verarbeitet und dann jeden Datensatz speichert Tabelle in meiner Parse db. Es scheint, dass mein Server nicht alle Speicheranforderungen akzeptieren kann. Ich bekomme einen code 100 Fehler mit der Nachricht: XMLHttpRequest failed: "Unable to connect to the Parse API" für etwa 60% der Speicheranforderungen.Parsen-Server XMLHttpRequest beim Speichern mit großem Dataset fehlgeschlagen

Mein Code sieht in etwa wie folgt aus:

makeHttpRequest('GET', endpoint).then((httpResponse) => { 

    const dataArray = httpResponse.body.array; 
    const Class = Parse.Object.extend('className'); 

    const savePromises = _.map(dataArray, (jsonObject) => { 

     const object = new Class(); 
     object.set(IdKey, "" + jsonObject.id); 
     object.set(nameKey, jsonObject.name); 
     return object.save(null, {useMasterKey: true}); 
    }); 

    return Parse.Promise.when(savePromises); 
}); 

Ich habe versucht, das Array Zerschlagung in Drittel (~ 4,5 KB Datensätze) und jeden Satz der Durchführung speichert sequentiell promise.then verwenden, aber ich bin immer noch:

{ 
    "code": 100, 
    "message": "XMLHttpRequest failed: \"Unable to connect to the Parse API\"" 
} 

aktualisieren: nach diesem Job zu unserem Produktionsserver migrieren, die https-fähig ist, ich eine etwas andere Fehlermeldung erhalten und viele mehr die kompletten spart. Ich vermute, dass aufgrund der zusätzlichen Kapazität unserer Produktionsserver mehr Einsparungen möglich sind. Der neue Fehler wie folgt aussieht:

{ 
    "code": 100, 
    "message": "XMLHttpRequest failed: {\"UNSENT\":0,\"OPENED\":1,\"HEADERS_RECEIVED\":2,\"LOADING\":3,\"DONE\":4,\"readyState\":4,\"responseText\":\"\",\"responseXML\":\"\",\"status\":504,\"statusText\":null,\"withCredentials\":false}" 
} 

Antwort

0

ich diese Parse.Object.saveAll(objects) unter Verwendung gelöst. Jetzt habe ich kein Problem, alle 13k-Datensätze auf einen Schlag zu speichern. Code sieht so aus:

makeHttpRequest('GET', endpoint).then((httpResponse) => { 

    const dataArray = httpResponse.body.array; 
    const Class = Parse.Object.extend('className'); 

    const allObjects = _.map(dataArray, (jsonObject) => { 

     const object = new Class(); 
     object.set(IdKey, "" + jsonObject.id); 
     object.set(nameKey, jsonObject.name); 
     return object; 
    }); 

    return Parse.Object.saveAll(allObjects, {useMasterKey: true}); 
}); 

Alles scheint jetzt gut zu funktionieren.

Verwandte Themen