50 GBのMBOXファイルを開く方法
巨大なMBOXファイルがビューアを落とすのは、壊れているからではありません。たいていのビューアが、まずファイル全体をメモリに読み込むからです。ストリーミング処理とインデックスが何を変えるのかを、実測値とともに。
読み込むのではなくストリーミングで処理するビューアを使ってください。それさえあれば、およそ50万通・50 GBのメールボックスが5分以内に開き、RAMの使用量は600 MBを下回ったままで、2回目からは1秒とかからずに開きます。それがなければ、ファイルの大きさは関係ありません。500 MBから2 GBのどこかで、ビューアは必ず倒れます。
なぜほかのものは詰まるのか
メールビューアを書くいちばん素直な方法が、ファイルを解析し、メッセージの一覧をメモリに作り、それを表示する、だからです。テストではこれが実に見事に動きます。サンプルのメールボックスは40 MBですから。
そこへ誰かがGmailの書き出しを開きます。パーサーは50万通を一度にRAMへ抱えようとし、プロセスはマシンの容量を突き抜け、終わらないぐるぐるか、クラッシュか、あるいは最悪の場合——20分後にようやく現れて、クリックのたびに引っかかるウィンドウが手に入ります。
問題はファイルではありません。50 GBのMBOXは、まったく普通のMBOXです。この形式にサイズの上限はなく、最初からありませんでした。上限があるのは、すべてがメモリに収まるという前提のほうです。
ストリーミングとは実際に何をすることか
ストリーミングパーサーはファイルを小さな塊に分けてたどり——Mbox Viewerは1 MBのバッファを使います——メッセージそのものを保持する代わりに、各メッセージがどこから始まるかを記録します。メモリの使用量はメッセージが何通あるかで決まり、それがどれだけ大きいかでは決まりません。実際に読んでいる数通だけをキャッシュが持ちます。
実務上の帰結はこうです。50 GBのアーカイブを開くのに要るRAMは、500 MBのものを開くのとほぼ同じ。機能ページで公開している数字は次のとおりです。
| サイズ | メッセージ数 | 初回起動 | 2回目以降 | RAM |
|---|---|---|---|---|
| 500 MB | 約5,000通 | 5秒未満 | 1秒未満 | 100 MB未満 |
| 5 GB | 約50,000通 | 30秒未満 | 1秒未満 | 200 MB未満 |
| 50 GB | 約500,000通 | 5分未満 | 1秒未満 | 600 MB未満 |
なぜ2回目は一瞬なのか
初回の走査が、取っておく価値のあるものを生むからです。各メッセージがどこから始まるかを記録したバイナリインデックスです。次に開くときはインデックスを読み込むだけで、50 GBを読み直すわけではありません。
インデックスはSHA-256で検証されます。足元でメールボックスが変わっていれば——ファイルを差し替えた、末尾に追記した——アプリはそれに気づき、古い一覧を見せるのではなく作り直します。インデックスはメールボックスの外に置かれ、メールボックスは1バイトも変わりません。
一度だけ5分、それ以降は毎回1秒。何年ものあいだ折に触れて参照するアーカイブにとって、この比率こそが、使うファイルと避けるファイルを分けるすべてです。
そのサイズでも検索は効くのか
効きます。そもそもそれが手間をかける理由です。50万通はスクロールするものではなく、問い合わせるものです。from:、to:、subject:、body:、date:、has:attachment、size:>、完全一致のフレーズ、OR、そして除外。全部まとめたものは早見表にあります。
本文検索はメールを実際に読み通すので、非常に大きなアーカイブでは一瞬というより数秒の作業になります。ヘッダーの検索——送信者、件名、日付——は即座に返り、そしてたいていの疑問はそれで片が付きます。
分割したほうがいいのか
そういう場面もありますが、思われているほど多くはありません。分割が報われるのは、切片が本当に別々に必要なときです。保管のために1年1ファイルにする、誰かに渡すぶんだけ切り出す、といった場合。開けるようにするためだけの分割は割に合いません。ビューアのほうに問題があるなら、分割しても何も解決しないからです。
それでも分割したいなら、巨大なThunderbirdのメールボックス向けのガイドがあります。そして必要なのが一部を引き渡すことなら、選択したものを新しいMBOXとして書き出すほうが筋が通ります。検索や絞り込みで対象を切り出し、そのメッセージだけを新しいファイルに書き、原本には手を触れない。
非常に大きなアーカイブでの実務メモ
- ディスクの空き: 必要なのはインデックスのぶんであって、メールの複製のぶんではありません。メールボックスのごく一部で足ります。
- 初回はネットワーク共有の上で開かないこと。 ストリーミングとはファイル全体を一度読むことであり、それをWi-Fi越しにやれば5分は午後いっぱいに化けます。ローカルにコピーして、開いて、戻してください。
- 分割されたTakeoutの書き出し: Googleは非常に大きなメールボックスを複数のファイルに分けます。1つずつでも開けますし、1つのメールボックスに統合することもできます。切片が重なっている場合はMessage-IDで重複を取り除きます。
- 無料版は1 GBまで開けます。 それより大きいものには一度きりの購入が必要です。サブスクリプションもアカウントもありません。
Mbox Viewer でアーカイブを開く
Mac と Windows のネイティブ アプリ。あらゆるサイズの MBOX・EML ファイルを完全にオフラインでストリーミングします。