先日、日本全域を切り出した3.16GB・1億行のXML で、ネイティブ版とブラウザ版の速度差を測りました。あのとき正直、こう思っていました。「1億行では、まだ本気を出していない」と。
UwView は「巨大ファイルを、いつでも瞬時に」を掲げているアプリです。掲げている以上、掲げどおりに壊れないかを、自分で確かめておく必要があります。そこで用意したのが、アメリカ全土のOpenStreetMapでした。
テストデータ:258.68GB の単一XMLファイル
OpenStreetMap のアメリカ全土データ(PBF形式・約11GB)を、osmium cat でXMLに展開しました。約15分かかって出てきたのが、これです。
us-260726.osm
258,679,440,228 byte = 258.68 GB(240.9 GiB)
ls -lh では「241G」と表示されます。これは GiB 表記なので、同じファイルの別の書き方です。分割していない、1本のXMLファイルです。
なぜこんなものを作ったかというと、「巨大」と言えるファイルは意外と手に入らないからです。ログは普通はローテートされますし、ダンプは分割されます。分割されていない、テラバイト手前の1ファイル——ビューアを本気で殴るには、自分で作るのが一番早い、という結論でした。
実測結果(macOS 実機・UwView Pro)
| 項目 | 実測値 | 条件 |
|---|---|---|
| 初回オープン(索引作成の完了まで) | 5分28秒(328秒) | 258.68GB を全走査 = 約 789 MB/s |
| 2回目以降のオープン | 一瞬 | .uwvz サイドカーあり(UwView Pro) |
| 総行数 | 4,509,830,821 行(45億行) | 索引完了後に確定 |
| 全文検索「New York」 | 34.8秒 / 100,492件ヒット | 索引完了後 |
| 全文検索「Boston」 | 約34秒 | 索引完了後 |
.uwvz サイドカーのサイズ |
28.61 GB(28,608,409,551 byte) | 元データの約1/9 |
計測はy4u(開発者本人)が Mac 実機で行った画面操作ベースの実測です。秒単位の精度で、ストップウォッチによる計測を含みます。
索引を作っている「最中」から、末尾まで読める
まず見てほしいのがこの画面です。

タブには us-260726.osm 10%、ステータスバーには「索引中」の進捗バーとキャンセルボタンが出ています。つまりまだ索引は1割しかできていない。それでも、本文には <relation> や <member type="way" ref="..."> がちゃんと表示され、スクロールもできます。
これが UwView のページモード即時オープンです。ファイル全体を読み込まずに、「見えている範囲だけ」を読んで描く。だから 258.68GB でも、選んだ瞬間から中身が出ます。索引はその裏側で進み、完成したら行番号が付く、という順番です。
多くのビューアは索引が終わるまで先頭しか見えません。5分28秒のあいだ、先頭だけを眺めて待つか、それとももう本文を読み始められるか。この差は、実際に困っているときほど効きます。
なお、この段階では行番号の欄(ガター)がまだ空です。行番号は索引完成後に付く——これは仕様どおりで、隠さずに書いておきます。
45億行という数字
索引が完了した後の画面がこちらです。

ステータスバーに「行モード|総行数 4,509,830,821・先頭 4,509,830,795 行目」。末尾までジャンプして、最終行の </osm> がちゃんと見えています。
45億行。行番号の桁が10桁になると、さすがに見ていて少し笑いました。ここまで来ても、ジャンプは一瞬です。行モードに入ってしまえば、あとは索引が仕事をしてくれるので、ファイルの大きさは体感に効いてきません。
検索は「語に関係なく約34秒」で一定だった
いちばん面白かったのが検索です。

「New York」で 100,492件。フィルタ結果ウィンドウに、前後±1行の文脈と行番号を付けて並んでいます。<tag k="operator" v="New York City Transit Authority"/> や <tag k="owner" v="City of New York"/> といった、いかにもOSMらしい行が拾えました。
この検索が 34.8秒。そして「Boston」で検索しても 約34秒でした。ヒット数はまったく違うのに、時間はほぼ同じです。
つまり UwView の全文検索は、ヒット件数ではなく、走査するデータ量で時間が決まるということです。これは実務では地味に嬉しい性質で、「珍しい語だから速いはず」「よくある語だから遅いはず」という当てずっぽうが要りません。どんな語を投げても約34秒と分かっていれば、コーヒーを淹れに行くかどうかを迷わずに決められます。
原ファイルの258.68GBを34秒で舐めた計算にすると約7.6GB/s になりますが、これは見かけの数字です。UwView Pro の検索は保存済みの圧縮キャッシュ(28.61GB)を経由するので、実際に読んでいるデータ量はもっと小さい。「SSDが7.6GB/s出た」という話ではない、という点は正直に書いておきます。
サイドカーは28.61GB — 元データの約1/9
UwView Pro は、初回オープンで作った索引と圧縮データを .uwvz というサイドカーファイルに保存します。今回は 28.61 GB(28,608,409,551 byte)でした。元の258.68GBに対して約1/9です。
この28.61GBがあるおかげで、2回目以降のオープンは一瞬になります。5分28秒が、ゼロになる。テラバイト手前でも、この価値提案は壊れませんでした。
そして1/9という数字は、保管の話でもあります。258.68GBのXMLを取っておく代わりに、28.61GBのサイドカーを取っておいて、必要なときにそのまま開いて検索する——という運用ができます。ストレージを専有している巨大ログに対して、UwView Pro が提案しているのはこの形です。
正直な注記
- すべて macOS 実機・単一ファイルでの実測です。マシン構成やストレージが変われば数字は動きます。
- 初回の 5分28秒 は短縮できません。 258.68GBを一度は全部読む必要があるからです。UwView が主張しているのは「初回が最速」ではなく、「初回オープン中でも読める」と「2回目以降は行番号付きで瞬時」の2点です。
- 検索結果が瞬時に返るのは索引完了後です。索引作成中の閲覧はできますが、全文検索の完走には索引が要ります。
- 2回目以降の「一瞬」は UwView Pro の機能です。無料版の UwView(UVF)はサイドカーを保存しないため、開くたびに索引をバックグラウンドで作り直します(ただし、閲覧と検索は同じように初回から可能です)。
- 検索時間の 34.8秒 / 約34秒 は、それぞれ1回の実測値です。複数回の平均ではありません。
- 「約789MB/s」「約7.6GB/s」は、ファイルサイズを所要時間で割った換算値であり、ストレージのベンチマーク値ではありません。
まとめ
258.68GB・45億行という、たぶん実務では滅多に出てこないサイズで確かめたかったのは、性能の自慢ではなく、設計の主張が壊れないかどうかでした。
- 索引作成中でも、開いた瞬間から全体を閲覧・スクロールできた(画面1)
- 45億行でも、末尾へのジャンプは一瞬だった(画面2)
- 検索は語に依らず約34秒で一定、10万件のヒットも文脈付きで並んだ(画面3)
- サイドカー28.61GB(約1/9)を保存し、2回目以降のオープンは一瞬になった
「巨大ファイルを、いつでも瞬時に」——テラバイト手前でも、この言い方を変えずに済みました。
UwView は無料で使えます。大きなログやダンプを触る方は、まずはお手元のいちばん大きいファイルで試してみてください。壊れたら、ぜひ教えてください。
関連記事
- 同じUwViewでも速度はどれだけ違う? — 無料版UVF(ネイティブ)とブラウザ版WASMを同一ファイルで実測
- 検索結果を独立ウィンドウに分離した理由 — ジャンプ・保存・前後文脈まで「見ながら」触れるフィルタPopup
- UwView Ver1.1.1 — 右クリックで即色分け、開き直せば前回の続きから
- UwView をGitHub公開 — Windows95時代の大容量テキストビューアを最大2億行・全OS対応にリニューアル
出典
- amru195704/UwView(GitHub) https://github.com/amru195704/UwView
- OpenStreetMap contributors(データ・ODbL) https://www.openstreetmap.org/copyright
- Geofabrik Download Server(OSM抽出データ配布) https://download.geofabrik.de/
- osmium-tool(PBF→XML 展開に使用) https://osmcode.org/osmium-tool/
UwView Pro(発売中・全OS対応:Windows/macOS/Linux)
「巨大ファイルをいつでも瞬時に表示・検索、索引を保存して2回目以降は行番号付きで瞬時に開く・検索が最大約9倍・ログを約1/9で保管してそのまま開ける」商用版です。買い切り $129 / 月額 $9。
→ https://uvp.y42u.net/pro/
開発者より: アプリ・Kindle本・オープンソースの一覧は GitHub: amru195704 にまとめています。
お願い
本記事の情報は参考目的で掲載しており、正確性・完全性を保証するものではありません。機能・数値は各時点の確認で、今後のアップデートで変わる可能性があります。誤記・不正確な情報がございましたら、コメント欄よりご指摘いただければ、確認のうえ修正いたします。


コメント