問題タブ [large-files]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
5 に答える
4306 参照

git - 500MBを超える多くのファイルを管理するのにgitの価値はありますか

バージョン管理下に大量のデータ、つまりサイズが約 500Mb の数百のファイルを含むディレクトリ構造 (深さ <=5) を配置します。

私が必要としているのは、私を助けるシステムです: - ファイルが変更されたかどうかを検出するため - ファイルが追加/削除されたかどうかを検出するため - リポジトリ全体を別の場所に複製するため - 「チェックポイント」を保存し、後で復元するため

変更検出にsha1は必要ありません。より高速なものが受け入れられます。

これにはgitの価値がありますか?より良い代替手段はありますか?

0 投票する
4 に答える
13233 参照

java - 大きなファイルをJavaでZIPに圧縮するには

JavaクラスZipOutputStreamを介して1つの大きなファイル(〜450 Mバイト)を圧縮する必要があります。この大きなディメンションにより、JVMヒープスペースの「OutOfMemory」エラーの問題が発生します。これは、「zos.write(...)」メソッドが、圧縮する前に圧縮するすべてのファイルコンテンツを内部バイト配列に格納するために発生します。

自然な解決策はJVMのヒープメモリスペースを拡大することですが、このデータをストリーミング方式で書き込む方法があるかどうかを知りたいと思います。高い圧縮率は必要ないので、アルゴリズムも変更できます。

誰かがそれについて考えを持っていますか?

0 投票する
6 に答える
4119 参照

gcc - gcc / g ++:大きなファイルをコンパイルするときのエラー

自動生成されたC++ソ​​ースファイルがあり、サイズは約40MBです。これは主に、プッシュされるいくつかのベクトルと文字列定数のpush_backコマンドで構成されています。

このファイルをコンパイルしようとすると、g ++が終了し、十分な仮想メモリ(約3 GB)を予約できなかったと表示されます。この問題をグーグルで調べてみると、コマンドラインスイッチを使用すると

問題を解決する可能性があります。ただし、これらは最適化がオンになっている場合にのみ機能するようです。

1)これは本当に私が探している解決策ですか?

2)または、これを行うためのより速く、より良い(コンパイルにはこれらのオプションを利用して時間がかかる)方法はありますか?

幸運をお祈りしています、

アレクサンダー

更新:すべての良いアイデアをありがとう。私はそれらのほとんどを試しました。いくつかのpush_back()操作の代わりに配列を使用すると、メモリ使用量が削減されましたが、コンパイルしようとしたファイルが非常に大きいため、後でクラッシュしました。ある意味、このような設定では最適化するものがあまりないため、この動作は非常に興味深いものです。GCCは、メモリを大量に消費する舞台裏で何をしているのでしょうか。(私はすべての最適化も非アクティブ化してコンパイルし、同じ結果を得ました)

ここで切り替えた解決策は、を使用して元のファイルから作成したバイナリオブジェクトファイルから元のデータを読み込むことですobjcopy。これは私が最初はやりたくなかったことです。なぜなら、C ++でこれを行うよりも、高水準言語(この場合はPerl)でデータ構造を作成する方が便利だったからです。

ただし、これをWin32で実行することは、予想よりも複雑でした。objcopyはELF形式のファイルを生成しているようで、出力形式を手動でに設定すると、問題のいくつかが解消されたようpe-i386です。オブジェクトファイル内のシンボルは、標準でファイル名にちなんで名付けられています。たとえば、ファイルinbuilt_training_data.binを変換すると、binary_inbuilt_training_data_bin_startとbinary_inbuilt_training_data_bin_endの2つのシンボルになります。これらのシンボルをとして宣言する必要があると主張するチュートリアルをWebで見つけましたextern char _binary_inbuilt_training_data_bin_start;が、これは正しくないようです-extern char binary_inbuilt_training_data_bin_start;私のためだけに機能しました。

0 投票する
3 に答える
476 参照

performance - 一定のスペース使用量でディスクからデータをストリーミングするための最も効率的なイディオムは何ですか?

問題の説明

ディスクから大きなファイルをストリーミングする必要があります。ファイルがメモリに収まるよりも大きいと仮定します。さらに、データに対して何らかの計算を行っていて、結果がメモリに収まるほど小さいと仮定します。架空の例として、200GBファイルのmd5sumを計算する必要があり、RAMの使用量を保証して計算する必要があるとします。

要約すれば:

  • 一定のスペースである必要があります
  • できるだけ速く
  • 非常に大きなファイルを想定する
  • 結果はメモリに収まります

質問

一定のスペースを使用してファイルからデータを読み取る/ストリーミングする最速の方法は何ですか?

私が持っていたアイデア

ファイルがメモリに収まるほど小さい場合、mmapPOSIXシステムでは非常に高速になりますが、残念ながらここではそうではありません。mmapファイルの連続するチャンクをバッファリングするために小さなバッファサイズで使用することにパフォーマンス上の利点はありますか?バッファをファイルの下に移動するシステムコールのオーバーヘッドがmmap利点を左右しますか、それとも、読み込んだ固定バッファを使用する必要がありfreadますか?

0 投票する
0 に答える
1089 参照

.net - 安全な場所 ​​.NET から大容量の再開可能なダウンロードを作成する方法

はじめに、私は .NET コーダーではありませんが、部分的な機能を得るために、チャンク データの読み取りと書き込みを使用する technet の chunkedfilefetch.aspx スクリプトを変更し、ファイル転送を実行するストリーム メソッドを使用して、途中までやり遂げました。

これは最大 2GB のファイルでうまく機能し、現在は完全に機能しています。しかし、再開できない問題が 1 つだけあります。

fetch.aspx という元のコードを使用して、URL を介して orderNUM を渡します。fetch.aspx&ordernum=xxxxxxx 次に、注文番号に従ってデータベースからファイル名/場所を読み取り、Webroot の下ではない安全な場所からそれをチャンクします。

これを再開可能にする方法が必要です。インターネットと大きなファイルの性質上、人々は常に切断され、中断したところから再開したいと考えています。しかし、私が読んだ再開可能な記事はすべて、ファイルが webroot 内にあると想定しています。http://www.devx.com/dotnet/Article/22533/1954すばらしい記事でうまく機能しますが、安全な場所からストリーミングする必要があります。

私はまったく .NET コーダーではありません。せいぜい、コールドフュージョンを少し行うことができます。これを行うためにハンドラーを変更するのを手伝ってくれる人がいれば、本当に感謝しています。

要件:

  • 正常に機能し、上記のコード スニペットをストリーミング ダウンロードのベースとして使用する、動作中の fetch.aspx スクリプトがあります。
  • ダウンロード ファイルは 600 MB と大きく、ウェブルート以外の安全な場所に保存されます。
  • ユーザーは fetch.aspx をクリックしてダウンロードを開始するため、失敗した場合は再度クリックすることになります。ext が .ASPX で、送信されるファイルが AVI の場合、それをクリックすると .AVI ext にマップされた IHTTP ハンドラが完全にバイパスされるため、混乱します。
  • 私が理解していることから、ブラウザーは etag 値とファイルの変更日を読み取って照合し、それらが同じファイルについて話していると判断し、その後の受け入れ範囲がブラウザーと IIS の間で交換されます。このダイアログは IIS で発生するため、ハンドラーを使用してインターセプトし、それに応じて応答する必要がありますが、リンクをクリックすると、ハンドラーが AVI フィールドにある必要がある ASPX ファイルに送信されます。また、私を混乱させます。
  • etag、accept-range を含む初期 HTTP 要求ヘッダーを通常の .ASPX ファイルに要求する方法があれば、それらの値を読み取ることができ、accept-range と etag が存在する場合は、そのバイト値でチャンクを開始できますか? しかし、IIS レベルで失われているように見えるため、http 要求ヘッダーを転送する方法が見つかりませんでした。

  • URL 文字列で渡される OrderNum は一意であり、ETag として使用できます

    /li>
  • ファイルは、サイズのために再開可能でチャンクアウトする必要があります。

  • ファイル拡張子は .AVI であるため、その周りにハンドラーを記述することができます。
  • IIS 6.0 Web サーバー

私はコードを読み、読み、ダウンロードしてきましたが、元のファイルが webroot の外部からストリーミングされているという私の状況を満たしている例はありません。これらの httphandlers のハンドルを取得するのを手伝ってください :)

0 投票する
6 に答える
57380 参照

python - Python: 巨大なテキスト ファイルをメモリに読み込む方法

1GB RAM を搭載した Mac Mini で Python 2.6 を使用しています。巨大なテキストファイルを読み込みたい

したがって、ファイルの各行は、コンマで区切られた 2 つの整数値のタプルで構成されます。ファイル全体を読み込んで、2 番目の列に従って並べ替えたいと思います。ファイル全体をメモリに読み込まずに並べ替えを実行できることはわかっています。しかし、500MB のファイルの場合、1GB が利用可能であるため、メモリ内で実行できるはずだと考えました。

ただし、ファイルを読み込もうとすると、Python はディスク上のファイルが必要とするよりも多くのメモリを割り当てているようです。そのため、1 GB の RAM を使用しても、500 MB のファイルをメモリに読み込むことができません。ファイルを読み取り、メモリ消費に関する情報を出力するための私の Python コードは次のとおりです。

私が得た出力は次のとおりです。

500MB のファイルの 25% だけを読み取った後でも、Python は 500MB を消費します。そのため、ファイルの内容を int のタプルのリストとして格納することは、メモリ効率があまり良くないようです。500MB のファイルを 1GB のメモリに読み込むことができるようにするためのより良い方法はありますか?

0 投票する
6 に答える
8858 参照

perl - 大きな (>10GB) ファイルをすばやく解析するにはどうすればよいですか?

形式のサイズが 10 ~ 20 GB のテキスト ファイルを処理する必要があります: field1 field2 field3 field4 field5

field2 の各行のデータをいくつかのファイルの 1 つに解析したいと思います。これがプッシュされるファイルは、field4 の値によって行ごとに決定されます。field2 には 25 の異なる値があり、したがって、データを解析できる 25 の異なるファイルがあります。

私は Perl (遅い) と awk (速いが遅い) を使ってみました。

参考までに、これは私が使用しようとしていた awk コードです。awkで一度に25個のファイルを開いたままにすることができなかったため、大きなファイルを25回処理する必要があったことに注意してください。

0 投票する
3 に答える
2041 参照

haskell - Haskell で大きなファイルを扱う

私は大きなファイル (4 ギガ以上) を持っています。たとえば、4 バイトのフロートです。map、filter、foldlなどを使用できるようにしたいという意味で、リストとして扱いたいと思います。しかし、出力で新しいリストを作成する代わりに、出力を書き戻したいと思いますしたがって、ファイルのごく一部をメモリにロードするだけで済みます。MutableFileList と呼ばれるタイプと言えます

誰かが以前にこの状況に遭遇したことがありますか? 車輪を再発明する代わりに、これに対処するためのハック的な方法があるかどうか疑問に思っていましたか?

0 投票する
6 に答える
1668 参照

java - 1 つの大きなファイルから読み取り、Java で多数 (数十、数百、または数千) のファイルに書き込みますか?

メッセージの種類ごとに約 6,000 個のファイルに解析したい小さなメッセージの大きなファイル (4 ~ 5 GB 圧縮) があります。メッセージは小さいです。タイプに応じて、5 ~ 50 バイトの範囲です。

各メッセージは、固定サイズのタイプ フィールド (6 バイトのキー) で始まります。タイプ「000001」のメッセージを読み取った場合、そのペイロードを 000001.dat などに追加して書き込みます。入力ファイルにはメッセージが混在しています。各出力ファイルに特定のタイプのメッセージのみが含まれる N 個の同種の出力ファイルが必要です。

これらのメッセージを非常に多くの個々のファイルに書き込む効率的で高速な方法は何ですか? できるだけ多くのメモリと処理能力を使用して、できるだけ速く処理したいと考えています。圧縮ファイルまたは非圧縮ファイルをディスクに書き込むことができます。

メッセージタイプのキーと出力ストリームの値を持つハッシュマップを使用することを考えていますが、もっと良い方法があると確信しています。

ありがとう!