2014年01月06日 作成、2014年01月23日 更新
超巨大テキストファイル(5TB = 5,120GB以上)を読み込む
大規模テキスト
超巨大テキストファイル:超巨大行数(2,000億行)の編集
鈴川エディタ(Windowsテキストエディター)が行数2兆5000億行以上、ファイルサイズ5TB=5120GB以上の超巨大テキストファイルを読み込み、編集できることを示します。
鈴川エディタでは、作成、編集したテキストファイルは保存しなくても直ちに閉じることができます。このとき、自動的にワークファイルフォルダとして保存されます。同じテキストファイルを直ちに再び開いて、閉じたときと同じテキスト位置から閲覧、編集を続行できます。Undo、Redoも閉じる前と同様に有効です。ただし、5TB級の超巨大テキストファイルの場合、再び開くとき、しばらく時間(本テストの場合、約2分間)がかかります。一旦作成編集したテキストファイルは[ワークファイルフォルダ操作]ダイアログボックス(鈴川エディタ → メニュー → ファイル → ワークファイルフォルダ操作)でワークファイルフォルダとして管理されます。
鈴川エディタは外部ファイルを開くとき、数メガバイトに分割して読み込み、専用のワークフォルダ(ワークファイルフォルダ)にビーズファイルとして保存します。ビーズファイルはワークファイルフォルダの中に作られたビーズフォルダに一定数(たとえば1万個)ずつ収納されます。つまり、鈴川エディタは外部ファイルを開くとき、読み込みと同時に保存(ビーズファイル)も実行します。読み込みと保存はHDD(SSD)に対して実行される処理ですが、二つの処理は一つのHDD(SSD)で実行されるより、二つ以上の異なるHDD(SSD)に対して実行される方が処理速度が向上します。つまり、A、B二つのHDD(SSD)を使用するとき、読み込みはA-HDD、保存はB-HDDに対して実行すると、処理速度が向上する(あるいは処理速度が低下しない)ことになります。そういうわけで、鈴川エディタを使用するときは、1台ではなく複数台のHDD(SSD)を使うと効率的な作業が期待できます。
巨大テキストファイルの読み込みと書き込みのとき、キャッシュが残っている場合と残っていない場合とでは、開始時点の処理速度が大分ちがいます。本番の読み込み(書き込み)を実行する前に、約1分くらい読み込み(書き込み)を実行して中止するという操作を2回ぐらい実行した後、本番を実行すると、キャッシュが残るために処理速度が向上するようです。本テストではこの馴らしの読み込みをしてから本番の読み込みを実行しました。
このページの目的は、鈴川エディタが行数(2兆5000億行以上)の心配をすることなく、しかも少ないメモリ(100MB前後)で、大きいテキストファイル(5TB以上)を作成、読み込み、閲覧、編集ができることを示すことです。
他のテキストエディタは、扱うことができる行数を制限していたり、制限を明示していなくてもある一定の行数に達すると、メモリ不足でアプリケーションが動かなくなったりします。しかし、鈴川エディタは行数よりもファイルサイズで決まります。行数制限はありません。行数によってメモリ不足になることもありません。鈴川エディタで扱うことができるファイルサイズは、使用可能な1台または2台以上のHDD(SSD)の合計ディスクサイズで決まります。行数やメモリで、左右されることはありません。ただし、他のアプリケーションによってメモリ不足の状態にある場合は別です。
100億行の改行記号だけのファイルを250個つなげて読み込んで、2兆5000億行の改行だけのファイルを作成します。これだけでも約4,700GBありますが、改行だけでは寂しいので先頭、中間、最後の付近で、改行数100億行、ファイルサイズ200GBのテキストファイルをそれぞれのカーソル位置に読み込みます。このときの使用メモリはタスク マネージャーで、ディスク使用量はエクスプローラで示します。
改行記号だけのテキストを作成、読み込むことで扱うことができる最大の改行数を知ることができます。
このテストを実行した環境は以下の通りです。
実は、2兆5000億行ファイルの読み込み、編集に関する一連のテストは2回行いました。1回目は2兆5000億行ファイルの読み込みだけを実行し、その状況を画像に取得しました。2回目は、再び初めから、2兆5000億行ファイルの読み込みを実行しましたが、1回目に取得した画像を利用すればよいですから、その状況は画像に取得しませんでした。続けて実行した先頭、中間、後部の3箇所への複数ファイル挿入のテストでは、その状況を画像に取得しました。準備と実行に要した日数は、1回目は2日間、2回目は3日間です。1回目と2回目は実行した日付が異なり、ワークファイルフォルダの名前も異なりますが、1回目と2回目の一連のテストは同一条件下で実行したもので、その結果はまったく同じものです。ここでは特に説明がないかぎり、一連のテストは連続して実行したものと解釈して、このページをご覧ください。
1つ100億行の改行だけのファイルを250個つなげて読み込みます。
このダイアログボックスで一つ100億行の改行だけのファイルを250個つないで一つのファイルとして読み込みます。
そのファイルは改行数が2兆5000億行になります。ファイル名は D:\Data\2500BL.txt です。文字コードはShift_JISです。ワークファイル文字コードもShift_JISです。
図-1-1
100億行の改行だけのファイル D:\Data\LF_10BL.txtを250個指定します。
図-1-2
[開く]ボタンをクリックすると、読み込みを開始します。
図-1-3
100億行の改行だけのファイル D:\Data\LF_10BL.txtを[複数ファイルをつなげて開く]ダイアログボックスの「つなぐファイルリスト」に250個追加します。
D:\Data\LF_10BL.txtのファイルサイズは約19GBです。
鈴川エディタは作業の間、編集プログレスダイアログで、時間や進捗率を表示します。
この作業には986分(約16時間半)かかります。進捗率5%毎にプログレスダイアログを示します。
図-2-1
「複数ファイルをつなげて開く」を開始して1分経過したところです。
図-2-2
進捗率5%毎にプログレスダイアログを示します。
図-2-3
「複数ファイルをつなげて開く」を終了したところです。986分(約16時間半)かかりました。読み込み時間はパソコン性能によって大きく異なります。テキストファイルの文字コードも読み込み時間に影響します。
編集プログレスダイアログを上に移動して、タスク マネージャーも表示します。読み込み中の鈴川エディタの使用メモリは約15MBです。
読み込み終了後、テキストウィンドウを3分割して、それぞれにテキストの先頭、中間、最後の部分を表示します。
図-4-1
読み込みが終了して、テキストの先頭部を表示しているところです。超巨大テキストの場合、読み込みが終了した後、テキストが表示されるまでしばらく時間がかかることがあります。
図-4-2
[Ctrl]+[End]キーでテキストの最後部にジャンプしたところです。超巨大行数の場合、垂直スクロールタブを最下部までドラッグしてもテキストの最後部を表示できません。このような場合、[Ctrl]+[End]キーを使うとよいでしょう。
「指定位置へジャンプ」メニューを実行すると、[ジャンプ]ダイアログボックスが表示されますが、性能が劣るパソコンで超巨大テキストを表示、編集する場合、[ジャンプ]ダイアログボックスの表示にしばらく時間がかかることがありますので、表示されるまで操作をしないでお待ちください。
図-4-3
テキストウィンドウを3分割して、それぞれにテキストの先頭、中間、最後の部分を表示しています。
改行だけでは寂しいので、読み込んだテキストの先頭部分、中間部分、最後部分の3箇所にそれぞれ、1個あたり2GB、1億行のテキストファイルを100個つなげて挿入します。
1箇所あたり、200GB、100億行のテキストファイルを挿入するということです。3箇所に挿入する合計は、ファイルサイズ600GB、改行数300億行になります。
一番上の分割ウィンドウで、テキストの先頭部分に2GB、1億行のテキストファイルを100個つなげて挿入します。
図-5-1
一番上の分割ウィンドウをクリックしてカーソルを移動します。この行に複数ファイルを挿入します。
[複数ファイルをつなげて開く]ダイアログボックスで2GB、1億行のテキストファイルを100個指定します。[OK]ボタンをクリックすると、読み込みと挿入を開始します。
図-5-2
[複数ファイルをつなげて開く]ダイアログボックスの「つなぐファイルリスト」に
2GB、1億行のテキストファイル
D:\Data\Text_100ML_Shift_JIS.txt
を100個追加します。
図-5-3
[複数ファイルをつなげて開く]ダイアログボックスで[OK]ボタンをクリックし読み込みと挿入を開始してから30秒経過したところです。
図-5-4
読み込みと挿入が50%処理されたところです。
図-5-5
読み込みと挿入が100%処理されたところです。
挿入を実行中、鈴川エディタ以外のアプリケーションを操作して再び鈴川エディタに戻ると、挿入処理は途中ですが、既に挿入されたテキストが一番上の分割ウィンドウに反映されます。ところが一番下の分割ウィンドウでは、一連の挿入処理が完了するまでその描画に必要なデータが挿入データを加味して更新されないために、テキストウィンドウが正常に描画されない状態が生じます。これは進捗率が100%であるときに限るのではなく、10%のときでも50%のときでも処理の途中で、一旦、他のアプリケーションに処理を移し、再び鈴川エディタをアクティブにすると、このような状態が出来します。しかし、これは問題にはなりません。一連の挿入処理が完了した時点で一番下の分割ウィンドウでもテキストが正常に描画されます。
図-5-6
読み込みと挿入が完了したところです。3つの分割ウィンドウで挿入したテキストが反映されています。テキスト最後の行数が2兆5000億行から約100億行増加しているのがわかります。挿入テキストの正確な行数は10,211,879,700行(約102億行)です。
ステータスバーで挿入した文字数を知ることができます。
挿入前 2,500,000,000,001(図-4-3) 挿入後 2,700,987,542,801 挿入した文字数 200,987,542,800(約2010億個)挿入テキストは、できる限り行数が大きくなるように、1行あたり半角文字で20個ぐらいに短かくしたもので、テスト用の無意味なテキストデータです。文字コードはShift_JISです。
図-5-7
挿入したテキストの最後の行にジャンプしたところです。
中央の分割ウィンドウで、テキストの中間部分に2GB、1億行のテキストファイルを100個つなげて挿入します。
図-6-1
中央の分割ウィンドウをクリックしてカーソルを移動します。この行に複数ファイルを挿入します。
図-6-2
[複数ファイルをつなげて開く]ダイアログボックスで2GB、1億行のテキストファイルを100個指定します。[OK]ボタンをクリックすると、読み込みと挿入を開始します。
図-6-3
[複数ファイルをつなげて開く]ダイアログボックスで[OK]ボタンをクリックし読み込みと挿入を開始してから30秒経過したところです。
図-6-4
読み込みと挿入が50%処理されたところです。
図-6-5
読み込みと挿入が100%処理されたところです。
図-5-5と同じ状況です。
図-6-6
読み込みと挿入が完了したところです。
図-5-6と同じ状況です。テキスト最後の行数が2兆5000億行から約200億行増加しているのがわかります。
ステータスバーで挿入した文字数を知ることができます。
挿入前 2,700,987,542,801(図-5-6) 挿入後 2,901,975,085,601 挿入した文字数 200,987,542,800(約2010億個)
図-6-7
挿入したテキストの最後の行にジャンプしたところです。
一番下の分割ウィンドウで、テキストの最後部分に2GB、1億行のテキストファイルを100個つなげて挿入します。
図-7-1
一番下の分割ウィンドウをクリックしてカーソルを移動します。この行に複数ファイルを挿入します。
[複数ファイルをつなげて開く]ダイアログボックスで2GB、1億行のテキストファイルを100個指定します。[OK]ボタンをクリックすると、読み込みと挿入を開始します。
図-7-2
[複数ファイルをつなげて開く]ダイアログボックスで[OK]ボタンをクリックし読み込みと挿入を開始してから30秒経過したところです。
図-7-3
読み込みと挿入が50%処理されたところです。
図-7-4
読み込みと挿入が100%処理されたところです。
図-7-5
読み込みと挿入が完了したところです。
図-7-6
挿入したテキストの最後の行にジャンプしたところです。
テキスト最後の行数が2兆5000億行から約300億行増加しているのがわかります。
ステータスバーで挿入した文字数を知ることができます。
挿入前 2,901,975,085,601(図-6-6) 挿入後 3,102,962,628,401 挿入した文字数 200,987,542,800(約2010億個)
テキストの先頭部分、中間部分、最後部分の3箇所にそれぞれ、200GB、100億行、合計で600GB、300億行のテキストファイルを挿入した後、タスク マネージャーを表示します。
鈴川エディタの使用メモリは約70MBです。
ハードディスクの使用状況をエクスプローラで表示します。
2兆5000億行ファイルの読み込み、編集には5TBを超える容量のHDD(SSD)が必要です。一つのHDDでは容量が足りませんので、二つのHDD(3TB-HDD、2台)を使用します。鈴川エディタは一つのテキストファイルを読み込み、編集するために複数のワークフォルダ(HDD)を指定できます。これは鈴川エディタ独自の方法です。「RAID 0(ストライピング)」、「JBOD」とは関係ありません。
2台のHDDは共に3TBです。各HDDのドライブはそれぞれ一つだけでドライブ名はHとIです。HとIの下位フォルダは同じ構成です。フォルダ構成は以下の通りです。
個別ワークフォルダは以下のように指定しました。
H:\szkw32\Work\<+>H:\szkw32\SubWork\<+>I:\szkw32\SubWork\
ファイル作成前のHドライブとIドライブは共に空です。ただし、鈴川エディタで使用する基本ワークフォルダ(空)があります。
図-9-1
Hドライブのプロパティです。2.72TB(名目3TB)がほぼすべて使用可能であることを示しています。
図-9-2
H:\szkw32\フォルダのプロパティです。すべて未使用であることを示しています。
図-9-3
Iドライブのプロパティです。2.72TB(名目3TB)がほぼすべて使用可能であることを示しています。
図-9-4
I:\szkw32\フォルダのプロパティです。すべて未使用であることを示しています。
2兆5000億行ファイルを作成したばかりで、テキストの先頭部分、中間部分、最後部分の3箇所に複数ファイルを未だ挿入していない場合のHドライブとIドライブを以下に示します。
複数ファイルの挿入前の合計使用ディスクサイズは、2.27TB × 2 = 4.54TB です。
ビーズフォルダの合計数は、62個 × 2 = 128個 です。
ビーズファイルの合計数は、(10000 × 61 + 351) + (10000 × 61 + 350) = 1,220,701個 です。
図-10-1
Hドライブのプロパティです。2.27TBが使用されています。
図-10-2
H:\szkw32\フォルダのプロパティです。2.27TBが使用されています。
このフォルダの下に次の二つのワークファイルフォルダが作成されています。
図-10-3
Iドライブのプロパティです。2.27TBが使用されています。
図-10-4
I:\szkw32\フォルダのプロパティです。2.27TBが使用されています。
このフォルダの下に次のワークファイルフォルダが作成されています。
図-10-5
H:\szkw32\Work\フォルダのプロパティです。
このフォルダの下にワークファイルフォルダ「1aidjr0phs」が作成されています。このワークファイルフォルダで19.9MBが使用されています。
図-10-6
H:\szkw32\SubWork\フォルダのプロパティです。
このフォルダの下にワークファイルフォルダ「1aidjr0phs」が作成されています。このワークファイルフォルダで2.27TBが使用されています。
図-10-7
I:\szkw32\SubWork\フォルダのプロパティです。
このフォルダの下にワークファイルフォルダ「1aidjr0phs」が作成されています。このワークファイルフォルダで2.27TBが使用されています。
図-10-8
H:\szkw32\Work\1aidjr0phs\はメインワークフォルダのワークファイルフォルダです。
図-10-9
H:\szkw32\SubWork\1aidjr0phs\はサブワークフォルダのワークファイルフォルダです。その先頭付近です。
この中にビーズフォルダ(Dir1~Dir62)が62個あります。各ビーズフォルダの中に10,000個のビーズファイルが収納されています。
図-10-10
H:\szkw32\SubWork\1aidjr0phs\はサブワークフォルダのワークファイルフォルダです。その中間付近です。
図-10-11
H:\szkw32\SubWork\1aidjr0phs\はサブワークフォルダのワークファイルフォルダです。その最後付近です。
図-10-12
I:\szkw32\SubWork\1aidjr0phs\はサブワークフォルダのワークファイルフォルダです。その先頭付近です。
この中にビーズフォルダ(Dir1~Dir62)が62個あります。各ビーズフォルダの中に10,000個のビーズファイルが収納されています。
図-10-13
I:\szkw32\SubWork\1aidjr0phs\はサブワークフォルダのワークファイルフォルダです。その中間付近です。
図-10-14
I:\szkw32\SubWork\1aidjr0phs\はサブワークフォルダのワークファイルフォルダです。その最後付近です。
図-10-15
H:\szkw32\SubWork\1aidjr0phs\Dir1\は62個(Dir1~Dir62)あるビーズフォルダのうちの1番目です。その先頭付近です。
この中に10,000個のビーズファイル(Str0~Str9999)が収納されています。
図-10-16
H:\szkw32\SubWork\1aidjr0phs\Dir1\は62個(Dir1~Dir62)あるビーズフォルダのうちの1番目です。その中間付近です。
図-10-17
H:\szkw32\SubWork\1aidjr0phs\Dir1\は62個(Dir1~Dir62)あるビーズフォルダのうちの1番目です。その最後付近です。
図-10-18
H:\szkw32\SubWork\1aidjr0phs\Dir30\は62個(Dir1~Dir62)あるビーズフォルダのうちの30番目です。その先頭付近です。
この中に10,000個のビーズファイル(Str290000~Str299999)が収納されています。
図-10-19
H:\szkw32\SubWork\1aidjr0phs\Dir30\は62個(Dir1~Dir62)あるビーズフォルダのうちの30番目です。その中間付近です。
図-10-20
H:\szkw32\SubWork\1aidjr0phs\Dir30\は62個(Dir1~Dir62)あるビーズフォルダのうちの30番目です。その最後付近です。
図-10-21
H:\szkw32\SubWork\1aidjr0phs\Dir62\は62個(Dir1~Dir62)あるビーズフォルダのうちの62番目です。その先頭付近です。
この中に352個のビーズファイル(Str610000~Str610351)が収納されています。
図-10-22
H:\szkw32\SubWork\1aidjr0phs\Dir62\は62個(Dir1~Dir62)あるビーズフォルダのうちの62番目です。その最後付近です。
図-10-23
I:\szkw32\SubWork\1aidjr0phs\Dir1\は62個(Dir1~Dir62)あるビーズフォルダのうちの1番目です。その先頭付近です。
この中に10,000個のビーズファイル(Str0~Str9999)が収納されています。
図-10-24
I:\szkw32\SubWork\1aidjr0phs\Dir1\は62個(Dir1~Dir62)あるビーズフォルダのうちの1番目です。その中間付近です。
図-10-25
I:\szkw32\SubWork\1aidjr0phs\Dir1\は62個(Dir1~Dir62)あるビーズフォルダのうちの1番目です。その最後付近です。
図-10-26
I:\szkw32\SubWork\1aidjr0phs\Dir30\は62個(Dir1~Dir62)あるビーズフォルダのうちの30番目です。その先頭付近です。
この中に10,000個のビーズファイル(Str290000~Str299999)が収納されています。
図-10-27
I:\szkw32\SubWork\1aidjr0phs\Dir30\は62個(Dir1~Dir62)あるビーズフォルダのうちの30番目です。その中間付近です。
図-10-28
I:\szkw32\SubWork\1aidjr0phs\Dir30\は62個(Dir1~Dir62)あるビーズフォルダのうちの30番目です。その最後付近です。
図-10-29
I:\szkw32\SubWork\1aidjr0phs\Dir62\は62個(Dir1~Dir62)あるビーズフォルダのうちの62番目です。その先頭付近です。
この中に351個のビーズファイル(Str610000~Str610350)が収納されています。
図-10-30
I:\szkw32\SubWork\1aidjr0phs\Dir62\は62個(Dir1~Dir62)あるビーズフォルダのうちの62番目です。その最後付近です。
2兆5000億行ファイルを作成した後、さらにテキストの先頭部分、中間部分、最後部分の3箇所に複数ファイルを挿入した場合のHドライブとIドライブを以下に示します。
ワークファイルフォルダ名が複数ファイル挿入前は「1aidjr0phs」でしたが、複数ファイル挿入後は「1aieg7gw16」に変わっていますが、これについてはこちらを参照してください。
複数ファイル挿入後の合計使用ディスクサイズは、(2.27TB + 0.3TB)× 2 = 5.14TB です。
ビーズフォルダの合計数は、(62個 + 14個) × 2 = 152個 です。
ビーズファイルの合計数は、
(10000 × 61 + 351) + (99649 + 10000 × 13 + 7558)
+ (10000 × 61 + 350) + (99650 + 10000 × 13 + 7557) = 1,515,115個 です。
図-11-1
2兆5000億行ファイルの作成と編集の後、それに使用されたHドライブとIドライブのワークフォルダの状況をエクスプローラーで示します。
図-11-2
Hドライブのプロパティです。2.57TBが使用されています。複数ファイル挿入前は2.27TBでした。約300GB増加しています。
図-11-3
H:\szkw32\フォルダのプロパティです。2.57TBが使用されています。複数ファイル挿入前は2.27TBでした。約300GB増加しています。
図-11-4
H:\szkw32\Work\1aieg7gw16\フォルダのプロパティです。
これはメインワークフォルダの下に作成されたワークファイルフォルダです。
図-11-5
H:\szkw32\SubWork\1aieg7gw16\フォルダのプロパティです。
これはサブワークフォルダの下に作成されたワークファイルフォルダです。2.57TBが使用されています。複数ファイル挿入前は2.27TBでした。約300GB増加しています。
図-11-6
Iドライブのプロパティです。2.57TBが使用されています。複数ファイル挿入前は2.27TBでした。約300GB増加しています。
図-11-7
I:\szkw32\フォルダのプロパティです。2.57TBが使用されています。複数ファイル挿入前は2.27TBでした。約300GB増加しています。
図-11-8
I:\szkw32\SubWork\1aieg7gw16\フォルダのプロパティです。
これはサブワークフォルダの下に作成されたワークファイルフォルダです。2.57TBが使用されています。複数ファイル挿入前は2.27TBでした。約300GB増加しています。
図-11-9
H:\szkw32\SubWork\1aieg7gw16\Dir62\は76個(Dir1~Dir76)あるビーズフォルダのうちの62番目です。10,000個あるビーズファイルの351番目先頭付近を示しています。
この中に10,000個のビーズファイル(Str610000~Str619999)が収納されています。
図-11-10
H:\szkw32\SubWork\1aieg7gw16\Dir62\は76個(Dir1~Dir76)あるビーズフォルダのうちの62番目です。その中間付近です。
図-11-11
H:\szkw32\SubWork\1aieg7gw16\Dir62\は76個(Dir1~Dir76)あるビーズフォルダのうちの62番目です。その最後付近です。
図-11-12
H:\szkw32\SubWork\1aieg7gw16\Dir76\は76個(Dir1~Dir76)あるビーズフォルダのうちの76番目です。その先頭付近です。
この中に7,559個のビーズファイル(Str750000~Str757558)が収納されています。
図-11-13
H:\szkw32\SubWork\1aieg7gw16\Dir76\は76個(Dir1~Dir76)あるビーズフォルダのうちの76番目です。その最後付近です。
図-11-14
I:\szkw32\SubWork\1aieg7gw16\Dir62\は76個(Dir1~Dir76)あるビーズフォルダのうちの62番目です。10,000個あるビーズファイルの350番目先頭付近を示しています。
この中に10,000個のビーズファイル(Str610000~Str619999)が収納されています。
図-11-15
I:\szkw32\SubWork\1aieg7gw16\Dir62\は76個(Dir1~Dir76)あるビーズフォルダのうちの62番目です。その最後付近です。
図-11-16
I:\szkw32\SubWork\1aieg7gw16\Dir76\は76個(Dir1~Dir76)あるビーズフォルダのうちの76番目です。その先頭付近です。
この中に7,558個のビーズファイル(Str750000~Str757557)が収納されています。
図-11-17
I:\szkw32\SubWork\1aieg7gw16\Dir76\は76個(Dir1~Dir76)あるビーズフォルダのうちの76番目です。その最後付近です。