Zenodo: Proyek siswa: Optimalisasi kinerja pengunduhan/pengunggahan file besar melalui HTTP

Dibuat pada 12 Feb 2016  ·  6Komentar  ·  Sumber: zenodo/zenodo

Kasus penggunaan

  • A) Seorang peneliti ingin mengunggah dataset penelitian 260GB miliknya ke Zenodo. Peneliti hanya memiliki browser untuk melakukan pekerjaan itu. Variasi: Para peneliti mengetahui sedikit tentang Python dan dapat menulis skrip yang mengunggah file ke Zenodo melalui API.
  • B) Seorang peneliti ingin mengunduh kumpulan data penelitian 260GB dari Zenodo.

Kita berbicara tentang file besar di sini (minimal 100mb,

Sasaran
Optimalkan kinerja unggah dan/atau unduh data ke/dari Zenodo.

Mengunggah
Pindahkan data dari ke Zenodo secepat mungkin. Menggunakan 1) JavaScript (Browser) dan/atau 2) Python (API).

_Sisi klien_
JavaScript: file potongan (banyak perpustakaan yang ada mendukung ini - misalnya PLUpload), unggah potongan secara paralel (belum pernah melihat ini di mana pun - bisa menggunakan misalnya pekerja web javascript).

Python: Hal yang sama seperti JavaScript - chunk/paralelize + melihat ke dalam pipa HTTP dan lapisan TCP juga.

Masalah yang perlu diperhatikan:

  • integritas file (bagaimana kami memastikan bahwa file yang dimiliki pengguna persis seperti yang telah diunggah (checksum file, tetapi jika Anda mengunggah secara paralel, algoritma checksum Anda harus mendukungnya).
  • latensi
  • dukungan browser untuk fitur yang digunakan.

_Sisi server_

  • Model proses (pemblokiran/non-pemblokiran IO) - kami menggunakan Gunicorn untuk menjalankan proses Python kami yang memiliki model peristiwa berbeda.
  • Analisis kinerja di sisi server (mis. dapatkah server menyalurkan file langsung ke penyimpanan file atau apakah perlu menyimpan potongan di memori).
  • Bagaimana kita bisa meningkatkan jumlah koneksi bersamaan.

Unduh
Contoh 1: Dataset 260GB dalam 1000 file. Bagaimana seorang peneliti dapat mengunduh file dengan mudah tanpa harus mengklik 1000 tautan.
Contoh 2: 260GB dataset dalam 4 file. Apa yang terjadi jika konektivitas jaringan hilang (yaitu unduhan yang dapat dilanjutkan).

_Sisi klien_
Mungkin mungkin untuk menulis aplikasi JavaScript yang dapat membantu mengunduh 1000 file. Aplikasi yang sama dapat membantu dengan unduhan yang dapat dilanjutkan. Sekali lagi, model pekerja web Javascript mungkin dapat digunakan untuk mengunduh file dalam potongan.

_Sisi server_
Menerapkan dukungan untuk permintaan rentang HTTP. Seperti unggahan (model proses, dan unduhan bersamaan). Misalnya, klien lambat yang meluangkan waktu untuk mengunduh file akan memenuhi batas.

Di luar cakupan (tetapi harus didiskusikan): Metode lain untuk mengoptimalkan pengiriman file seperti Jaringan Pengiriman Konten.


Bagian Python terutama akan masuk ke inveniosoftware/invenio-files-rest
Bagian JavaScript akan menjadi repositori terpisah.

Komentar yang paling membantu

Apakah ada cara yang lebih baik untuk mengunduh file besar daripada menggunakan peramban internet biasa? File besar melalui http cenderung gagal dalam beberapa jam, dan unduhan tidak dapat dilanjutkan.

Dalam kasus saya, saya mencoba mengunduh kumpulan data 50 GB.
Kecepatan unduh berkisar 500 Kbps dan koneksi gagal di antara 12 jam sejak unduhan berlangsung.

Saya sudah mencoba mengunduhnya setiap hari selama berbulan-bulan sekarang (saya membutuhkan dataset untuk tesis master saya).
Ada saran?

Semua 6 komentar

Maaf untuk menghidupkan kembali masalah lama ini ke arah yang agak di luar topik ... Saya sangat ingin server HTTP Zenodo mendukung permintaan rentang HTTP, yang disebutkan dalam komentar asli. Sejauh yang saya tahu, mereka saat ini tidak dihormati. Apakah ini ada di peta jalan saat ini?

Apakah ada cara yang lebih baik untuk mengunduh file besar daripada menggunakan peramban internet biasa? File besar melalui http cenderung gagal dalam beberapa jam, dan unduhan tidak dapat dilanjutkan.

Dalam kasus saya, saya mencoba mengunduh kumpulan data 50 GB.
Kecepatan unduh berkisar 500 Kbps dan koneksi gagal di antara 12 jam sejak unduhan berlangsung.

Saya sudah mencoba mengunduhnya setiap hari selama berbulan-bulan sekarang (saya membutuhkan dataset untuk tesis master saya).
Ada saran?

Saya bahkan tidak dapat mengunduh kumpulan data 2,2 GB setelah 5 kali mencoba, pengelola unduhan juga tidak dapat membantu.

@Vichoko , apakah Anda berhasil menyelesaikannya? jika ya, bagaimana?

Saya juga sangat frustrasi mencoba mengunduh kumpulan data yang mencakup dua file besar (12Gb dan 37Gb) selama berhari-hari.

Saya menemukan https://zenodo.org/record/261813 (https://gitlab.com/dvolgyes/zenodo_get) dan itu sangat membantu. Saya berhasil mengunduh seluruh catatan pada percobaan pertama.
Pada pandangan pertama saya tidak melihat sesuatu yang ajaib tentang itu, jadi saya kira triknya pasti ada di beberapa internal implementasi Python dari wget .

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

Saya dapat mengunduh file 21GB lebih cepat pada tahun 2006 dengan dial-up. Apakah Zenodo kekurangan infrastruktur CDN? Mengapa tidak menggunakan bucket S3 atau GCS?

Saya pikir masalah ini harus dibuka kembali, mengingat Zenodo menunjukkan unduhan yang lambat dan tidak stabil. Atau jika ada masalah lain untuk melacak unduhan Zenodo?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

maurice-schleussinger picture maurice-schleussinger  ·  3Komentar

ShixiangWang picture ShixiangWang  ·  9Komentar

CristianCantoro picture CristianCantoro  ·  5Komentar

bniebuhr picture bniebuhr  ·  6Komentar

wkpalan picture wkpalan  ·  3Komentar