Zenodo: 学生プロジェクト:HTTPを介した大きなファイルのダウンロード/アップロードパフォーマンスの最適化

作成日 2016年02月12日  ·  6コメント  ·  ソース: zenodo/zenodo

使用事例

  • A)研究者が自分の260GBの研究データセットをZenodoにアップロードしたいと考えています。 研究者は仕事をするために彼/彼女のブラウザを持っているだけです。 バリエーション:研究者はPythonについて少し知っており、APIを介してZenodoにファイルをアップロードするスクリプトを作成できます。
  • B)研究者が、Zenodoから260GBの研究データセットをダウンロードしたいと考えています。

ここでは大きなファイルについて話します(最小100 MB、

ゴール
Zenodoとの間のデータのアップロードおよび/またはダウンロードのパフォーマンスを最適化します。

アップロード
データをZenodoからZenodoにできるだけ速く移動します。 1)JavaScript(ブラウザ)および/または2)Python(API)を使用します。

_クライアント側_
JavaScript:チャンクファイル(多くの既存のライブラリがこれをサポートしています-たとえばPLUpload)、チャンクを並列にアップロードします(これはどこでも見られませんでした-たとえばjavascript Webワーカーを使用できます)。

Python:JavaScriptと同じです-チャンク/並列化+ HTTPパイプラインとTCPレイヤーも調べます。

考慮すべき問題:

  • ファイルの整合性(ユーザーが持っているファイルがアップロードされたものと正確に一致することをどのように確認しますか(ファイルをチェックサムしますが、並行してアップロードする場合は、チェックサムアルゴリズムがそれをサポートする必要があります)。
  • レイテンシー
  • 使用されている機能に対するブラウザのサポート。

_サーバ側_

  • プロセスモデル(ブロッキング/非ブロッキングIO)-Gunicornを使用して、さまざまなイベントモデルを持つPythonプロセスを実行しています。
  • サーバー側でのパフォーマンス分析(たとえば、サーバーはファイルをファイルストレージに直接パイプできるか、チャンクをメモリに保持する必要がありますか)。
  • 同時接続の数を増やすにはどうすればよいですか。

ダウンロード
例1:1000ファイルの260GBデータセット。 研究者が1000のリンクをクリックせずにファイルを簡単にダウンロードするにはどうすればよいでしょうか。
例2:4つのファイルの260GBデータセット。 ネットワーク接続が失われた場合(つまり、再開可能なダウンロード)はどうなりますか。

_クライアント側_
おそらく、1000個のファイルのダウンロードに役立つJavaScriptアプリを作成することは可能です。 同じアプリが再開可能なダウンロードに役立つ可能性があります。 繰り返しになりますが、Javascript Webワーカーモデルを使用して、ファイルをチャンクでダウンロードできる可能性があります。

_サーバ側_
HTTP範囲リクエストのサポートを実装します。 アップロード(プロセスモデル、および同時ダウンロード)と同様です。 たとえば、ファイルのダウンロードに時間がかかる遅いクライアントは、行をいっぱいにします。

範囲外(ただし、議論する必要があります):コンテンツ配信ネットワークのようなファイル配信を最適化する他の方法。


Pythonの部分は主にinveniosoftware / invenio-files-restに入ります
JavaScriptパーツは個別のリポジトリになります。

最も参考になるコメント

一般的なインターネットブラウザを使用するよりも大きなファイルをダウンロードするためのより良い方法はありますか? httpを介した大きなファイルは数時間以内に失敗する傾向があり、ダウンロードを再開することはできません。

私の場合、50GBのデータセットをダウンロードしようとしています。
ダウンロード速度は500Kbpsに丸められ、ダウンロードが続く12時間の間に接続が失敗します。

私はこれを何ヶ月も毎日ダウンロードしようとしています(修士論文のデータセットが必要です)。
助言がありますか?

全てのコメント6件

この古い問題をややトピックから外れた方向に復活させて申し訳ありません... ZenodoHTTPサーバーが元のコメントで言及されているHTTP範囲要求をサポートすることを強く望んでいます。 私の知る限り、彼らは現在名誉を与えられていません。 これは現在ロードマップにありますか?

一般的なインターネットブラウザを使用するよりも大きなファイルをダウンロードするためのより良い方法はありますか? httpを介した大きなファイルは数時間以内に失敗する傾向があり、ダウンロードを再開することはできません。

私の場合、50GBのデータセットをダウンロードしようとしています。
ダウンロード速度は500Kbpsに丸められ、ダウンロードが続く12時間の間に接続が失敗します。

私はこれを何ヶ月も毎日ダウンロードしようとしています(修士論文のデータセットが必要です)。
助言がありますか?

5回試行しても2.2GBのデータセットをダウンロードできず、ダウンロードマネージャーも役に立ちませんでした。

@Vichoko 、なんとか解決できましたか? はいの場合、どのように?

私も、2つの大きなファイル(12Gbと37Gb)を含むデータセットを何日もダウンロードしようとして非常にイライラしていました。

https://zenodo.org/record/1261813(https://gitlab.com/dvolgyes/zenodo_get )を見つけましたが、非常に役立ちました。 私は最初の試みでレコード全体をダウンロードすることができました。
一見、魔法のようなものは何も見当たらないので、そのトリックはwgetのPython実装の内部のいくつかにあるに違いないと思います。

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

2006年には、ダイヤルアップを使用して21GBのファイルをより高速にダウンロードできました。 ZenodoにはCDNインフラストラクチャがありませんか? S3またはGCSバケットを使用してみませんか?

Zenodoのダウンロードが異常に遅く不安定であることを考えると、この問題を再開する必要があると思います。 または、Zenodoのダウンロードを追跡するための別の問題がある場合はどうなりますか?

このページは役に立ちましたか?
0 / 5 - 0 評価