Zenodo: Studentenprojekt: Optimierung der Download-/Upload-Leistung großer Dateien über HTTP

Erstellt am 12. Feb. 2016  ·  6Kommentare  ·  Quelle: zenodo/zenodo

Anwendungsfall

  • A) Ein Forscher möchte seinen 260 GB großen Forschungsdatensatz auf Zenodo hochladen. Der Forscher ist nur im Besitz seines Browsers, um die Arbeit zu erledigen. Variante: Die Forscher kennen sich ein bisschen mit Python aus und können ein Skript schreiben, das eine Datei über die API auf Zenodo hochlädt.
  • B) Ein Forscher möchte einen 260 GB großen Forschungsdatensatz von Zenodo herunterladen.

Wir sprechen hier von großen Dateien (mindestens 100 MB,

Ziel
Optimieren Sie die Leistung des Uploads und/oder Downloads von Daten zu/von Zenodo.

Hochladen
Verschieben Sie Daten so schnell wie möglich von Zenodo. Verwendung von 1) JavaScript (Browser) und/oder 2) Python (API).

_Kundenseite_
JavaScript: Chunk-Datei (viele vorhandene Bibliotheken unterstützen dies - zB PLUpload), Chunks parallel hochladen (habe das nirgendwo gesehen - könnte zB Javascript-Webworker verwenden).

Python: Das Gleiche wie JavaScript - Chunk/Parallelize + auch in HTTP-Pipeline und TCP-Layer nachsehen.

Zu berücksichtigende Probleme:

  • Dateiintegrität (wie stellen wir sicher, dass die Datei, die der Benutzer hat, genau die ist, die er hochgeladen hat (Prüfsumme der Datei, aber wenn Sie parallel hochladen, sollte Ihr Prüfsummenalgorithmus dies unterstützen).
  • Latenz
  • Browserunterstützung für verwendete Funktionen.

_Serverseite_

  • Prozessmodell (blockierende/nicht blockierende IO) – wir verwenden Gunicorn, um unsere Python-Prozesse auszuführen, die unterschiedliche Ereignismodelle haben.
  • Leistungsanalyse auf der Serverseite (z. B. kann der Server die Dateien direkt zum Dateispeicher leiten oder muss er den Chunk im Speicher behalten).
  • Wie können wir die Anzahl gleichzeitiger Verbindungen erhöhen?

Herunterladen
Beispiel 1: 260 GB Datensatz in 1000 Dateien. Wie kann ein Forscher die Dateien einfach herunterladen, ohne 1000 Links anklicken zu müssen.
Beispiel 2: 260 GB Datensatz in 4 Dateien. Was passiert, wenn die Netzwerkverbindung unterbrochen wird (dh fortsetzbare Downloads).

_Kundenseite_
Vielleicht ist es möglich, eine JavaScript-App zu schreiben, die beim Herunterladen der 1000 Dateien helfen kann. Dieselbe App könnte bei fortsetzbaren Downloads helfen. Auch hier könnte möglicherweise das Javascript-Webworker-Modell verwendet werden, um die Datei in Teilen herunterzuladen.

_Serverseite_
Implementieren Sie die Unterstützung für HTTP-Bereichsanforderungen. Wie Upload (Prozessmodell und gleichzeitige Downloads). Langsame Clients, die Zeit brauchen, um eine Datei herunterzuladen, füllen z. B. die Leitung.

Außerhalb des Geltungsbereichs (sollte aber diskutiert werden): Andere Methoden zur Optimierung der Dateibereitstellung wie Content Delivery Networks.


Der Python-Teil wird hauptsächlich in inveniosoftware/invenio-files-rest gehen
JavaScript-Teile werden separate Repositories sein.

Hilfreichster Kommentar

Gibt es eine bessere Möglichkeit, große Dateien herunterzuladen, als einen gewöhnlichen Internetbrowser zu verwenden? Große Dateien über http schlagen in der Regel innerhalb von Stunden fehl, und der Download kann nicht fortgesetzt werden.

In meinem Fall versuche ich, einen 50-GB-Datensatz herunterzuladen.
Die Download-Geschwindigkeit liegt bei rund 500 Kbps und die Verbindung schlägt zwischen den 12 Stunden, die der Download dauert, fehl.

Ich versuche es seit Monaten jeden Tag herunterzuladen (ich brauche den Datensatz für meine Masterarbeit).
Irgendwelche Vorschläge?

Alle 6 Kommentare

Entschuldigung, dass ich dieses alte Problem in einer etwas off-topic-Richtung wiederbeleben muss ... Ich würde es sehr begrüßen, wenn der Zenodo-HTTP-Server HTTP-Range-Requests unterstützt, die im ursprünglichen Kommentar erwähnt werden. Soweit ich das beurteilen kann, werden sie derzeit nicht geehrt. Steht das aktuell auf der Roadmap?

Gibt es eine bessere Möglichkeit, große Dateien herunterzuladen, als einen gewöhnlichen Internetbrowser zu verwenden? Große Dateien über http schlagen in der Regel innerhalb von Stunden fehl, und der Download kann nicht fortgesetzt werden.

In meinem Fall versuche ich, einen 50-GB-Datensatz herunterzuladen.
Die Download-Geschwindigkeit liegt bei rund 500 Kbps und die Verbindung schlägt zwischen den 12 Stunden, die der Download dauert, fehl.

Ich versuche es seit Monaten jeden Tag herunterzuladen (ich brauche den Datensatz für meine Masterarbeit).
Irgendwelche Vorschläge?

Ich konnte nach 5 Versuchen nicht einmal einen 2,2-GB-Datensatz herunterladen, der Download-Manager konnte auch nicht helfen.

@Vichoko , hast du es geschafft, es zu lösen? wenn ja, wie?

Auch ich war sehr frustriert, als ich tagelang versucht habe, einen Datensatz herunterzuladen, der zwei große Dateien (12 GB und 37 GB) enthält.

Ich habe https://zenodo.org/record/1261813 (https://gitlab.com/dvolgyes/zenodo_get) gefunden und es hat sehr geholfen. Ich habe es geschafft, die gesamte Aufzeichnung auf Anhieb herunterzuladen.
Auf den ersten Blick sehe ich nichts Magisches daran, also denke ich, dass der Trick in einigen Interna der Python-Implementierung von wget liegen muss.

Link: https://zenodo.org/api/files/cb4ca1fa-1db1-40f9-8f39-0e9d3b2af7ae/musdb18hq.zip   size: 21607.1 MB
  0% [                                             ]     3121152 / 22656664047

Ich konnte 2006 mit Einwahl 21 GB Dateien schneller herunterladen. Fehlt Zenodo die CDN-Infrastruktur? Warum nicht einen S3- oder GCS-Bucket verwenden?

Ich denke, dieses Problem sollte erneut geöffnet werden, da Zenodo ungewöhnlich langsame und instabile Downloads aufweist. Oder gibt es ein anderes Problem beim Verfolgen von Zenodo-Downloads?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

lnielsen picture lnielsen  ·  8Kommentare

maurice-schleussinger picture maurice-schleussinger  ·  3Kommentare

par4dise picture par4dise  ·  9Kommentare

slint picture slint  ·  4Kommentare

minygd picture minygd  ·  8Kommentare