参考: 有一个1G大小的一个文件,内存限制大小是10M,有序返回频数最高的50个词,该怎么做?
网上有很多该问题的解决方案,都是用分而治之的思想,提到了遍历整个文件。
那么我的问题是:如果单纯地逐行读取大文件,算是把1G文件全都加载进内存吗?或者说是读取大于内存的文件应该怎么读?
认证0级讲师
ここでのメモリはパイプのようなもので、1G のファイルをメモリに渡すだけです。10M はパイプの太さを表します。 そのため、1 行ずつ読み取ると 1G のファイルが 加载进去过 メモリに取り込まれます。
加载进去过
リーリー
ファイルがどんなに大きくても、各行の長さが制限されている限り、ファイル全体を読み取るには時間がかかりますが、メモリをあまり消費しません。
チャンクで読み取り、チャンクごとに 1 つの結果セットを読み取り、最後に結果セットを集計します テキストを処理している場合は、行数を知っておくとよいでしょう
linux上面有个指令叫做split大きなテキストを同時に小さなファイルにすばやく分割して、便利に処理できます。このアルゴリズムは外部ソートと呼ばれます
linux
split
記憶はメモ用紙のようなものです。記事を書き終えたら、裏返します。 使用済みおよび未使用のデータは破棄されます。
簡単な例では、変数 buff を作成し、そのサイズを設定し、ファイル ストリームを開いて値を入力します。値が入力された後、必要な内容を確認します。見つかった場合は、別の変数でカウントされます。 次に、バフをクリアし、以前に読み取られた位置でコンテンツを再度ロードし続けます...読み取りが完了するまで、統計が完了します。
さまざまなシステムに対して、メモリより大きいファイルを操作するための API が提供されます。つまり、ファイルはメモリとして扱われます。
内存映射
mmap
ファイルマッピングの作成
ここでのメモリはパイプのようなもので、1G のファイルをメモリに渡すだけです。10M はパイプの太さを表します。
そのため、1 行ずつ読み取ると 1G のファイルが
加载进去过
メモリに取り込まれます。リーリー
ファイルがどんなに大きくても、各行の長さが制限されている限り、ファイル全体を読み取るには時間がかかりますが、メモリをあまり消費しません。
チャンクで読み取り、チャンクごとに 1 つの結果セットを読み取り、最後に結果セットを集計します
テキストを処理している場合は、行数を知っておくとよいでしょう
。linux
上面有个指令叫做split
大きなテキストを同時に小さなファイルにすばやく分割して、便利に処理できます。このアルゴリズムは外部ソートと呼ばれます記憶はメモ用紙のようなものです。記事を書き終えたら、裏返します。 使用済みおよび未使用のデータは破棄されます。
簡単な例では、変数 buff を作成し、そのサイズを設定し、ファイル ストリームを開いて値を入力します。値が入力された後、必要な内容を確認します。見つかった場合は、別の変数でカウントされます。 次に、バフをクリアし、以前に読み取られた位置でコンテンツを再度ロードし続けます...読み取りが完了するまで、統計が完了します。
さまざまなシステムに対して、メモリより大きいファイルを操作するための API が提供されます。つまり、ファイルはメモリとして扱われます。
内存映射
mmap
ファイルマッピングの作成