Zenodo: Proyecto de estudiante: Optimización del rendimiento de carga/descarga de archivos grandes a través de HTTP

Creado en 12 feb. 2016  ·  6Comentarios  ·  Fuente: zenodo/zenodo

caso de uso

  • A) Un investigador desea cargar su conjunto de datos de investigación de 260 GB en Zenodo. El investigador sólo está en posesión de su navegador para realizar el trabajo. Variación: los investigadores conocen un poco de Python y pueden escribir un script que cargue un archivo a Zenodo a través de la API.
  • B) Un investigador quiere descargar un conjunto de datos de investigación de 260 GB de Zenodo.

Estamos hablando de archivos grandes aquí (mínimo 100 mb,

Meta
Optimice el rendimiento de carga y/o descarga de datos hacia/desde Zenodo.

Subir
Mueva los datos de Zenodo lo más rápido posible. Usando 1) JavaScript (navegador) y/o 2) Python (API).

_Lado del cliente_
JavaScript: archivo de fragmentos (muchas bibliotecas existentes admiten esto, por ejemplo, PLUpload), cargue fragmentos en paralelo (no he visto esto en ningún lugar; podría usar, por ejemplo, trabajadores web de JavaScript).

Python: lo mismo que JavaScript: fragmentar/paralelizar + buscar en la canalización HTTP y la capa TCP también.

Cuestiones a tener en cuenta:

  • integridad del archivo (¿cómo nos aseguramos de que el archivo que tiene el usuario es exactamente lo que ha subido?)
  • latencia
  • soporte del navegador para las funciones que se utilizan.

_Lado del servidor_

  • Modelo de proceso (IO de bloqueo/no bloqueo): estamos usando Gunicorn para ejecutar nuestros procesos de Python que tienen diferentes modelos de eventos.
  • Análisis de rendimiento en el lado del servidor (por ejemplo, ¿puede el servidor canalizar los archivos directamente al almacenamiento de archivos o necesita mantener el fragmento en la memoria?).
  • ¿Cómo podemos aumentar el número de conexiones simultáneas?

Descargar
Ejemplo 1: conjunto de datos de 260 GB en 1000 archivos. ¿Cómo puede un investigador descargar los archivos fácilmente sin tener que hacer clic en 1000 enlaces?
Ejemplo 2: conjunto de datos de 260 GB en 4 archivos. Qué sucede si se pierde la conectividad de la red (es decir, descargas reanudables).

_Lado del cliente_
Tal vez sea posible escribir una aplicación de JavaScript que pueda ayudar a descargar los 1000 archivos. La misma aplicación podría ayudar con las descargas reanudables. Nuevamente, el modelo de trabajo web de Javascript podría usarse para descargar el archivo en fragmentos.

_Lado del servidor_
Implementar soporte para solicitudes de rango HTTP. Me gusta cargar (modelo de proceso y descargas simultáneas). Por ejemplo, los clientes lentos que tardan en descargar un archivo llenarán la línea.

Fuera del alcance (pero debe discutirse): otros métodos para optimizar la entrega de archivos, como las redes de entrega de contenido.


La parte de Python irá principalmente a inveniosoftware/invenio-files-rest
Las partes de JavaScript serán repositorios separados.

Comentario más útil

¿Hay una mejor manera de descargar archivos grandes que usar un navegador de Internet común? Los archivos grandes a través de http tienden a fallar en cuestión de horas y la descarga no se puede reanudar.

En mi caso, estoy tratando de descargar un conjunto de datos de 50 GB.
La velocidad de descarga ronda los 500 Kbps y falla la conexión entre las 12 horas que dura la descarga.

He estado tratando de descargarlo todos los días durante meses (necesito el conjunto de datos para mi tesis de maestría).
¿Alguna sugerencia?

Todos 6 comentarios

Lamento resucitar este viejo problema en una dirección algo fuera de tema... Me gustaría mucho que el servidor HTTP de Zenodo admitiera solicitudes de rango HTTP, que se mencionan en el comentario original. Por lo que puedo decir, actualmente no son honrados. ¿Está esto en la hoja de ruta en este momento?

¿Hay una mejor manera de descargar archivos grandes que usar un navegador de Internet común? Los archivos grandes a través de http tienden a fallar en cuestión de horas y la descarga no se puede reanudar.

En mi caso, estoy tratando de descargar un conjunto de datos de 50 GB.
La velocidad de descarga ronda los 500 Kbps y falla la conexión entre las 12 horas que dura la descarga.

He estado tratando de descargarlo todos los días durante meses (necesito el conjunto de datos para mi tesis de maestría).
¿Alguna sugerencia?

Ni siquiera pude descargar un conjunto de datos de 2,2 GB después de 5 intentos, el administrador de descargas tampoco pudo ayudar.

@Vichoko , lograste resolverlo? en caso afirmativo, ¿cómo?

Yo también me he sentido muy frustrado al intentar descargar un conjunto de datos que incluye dos archivos grandes (12 Gb y 37 Gb) durante días y días.

Encontré https://zenodo.org/record/1261813 (https://gitlab.com/dvolgyes/zenodo_get) y me ayudó mucho. Me las arreglé para descargar todo el registro en el primer intento.
A primera vista, no veo nada mágico al respecto, así que supongo que el truco debe estar en algunas de las partes internas de la implementación de wget en Python.

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

Podía descargar archivos de 21 GB más rápido en 2006 con acceso telefónico. ¿Zenodo carece de infraestructura CDN? ¿Por qué no usar un depósito S3 o GCS?

Creo que este problema debería reabrirse, dado que Zenodo exhibe descargas anormalmente lentas e inestables. ¿O si hay otro problema para rastrear las descargas de Zenodo?

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

virresh picture virresh  ·  7Comentarios

ShixiangWang picture ShixiangWang  ·  9Comentarios

bniebuhr picture bniebuhr  ·  6Comentarios

maurice-schleussinger picture maurice-schleussinger  ·  3Comentarios

davidanthoff picture davidanthoff  ·  5Comentarios