パッケージとして販売されているファイルサーバ検索システムの多くは、「1千万文書の大規模検索が可能」など、その高性能をアピールしていますが、実際には何千万文書ぐらいまでの全文検索に利用できるのでしょうか。多くの製品が、ノンカスタマイズでパッケージとして対応できる文書数は、1千万文書の大台あたりであるように思われます。
 弊社のファイルサーバ全文検索システム「FileBlog」も、3000万文書クラスの検索まではノンカスタマイズで対応していますが、これを実証するために、実際にApache Solrの分散検索システム機能-Solr Cloud-を利用して、一桁上の「1億文書」の全文検索インデックスを構築してみることにしました。

実証結果 〜 1ヶ月でインデックス構築完了 〜

  • 1億文書のインデックスの構築に成功しました
  • インデックス構築の所要時間は約1ヶ月でした
  • 全文検索の実行に成功しました
  • 100万文書のWikipediaデータの複製100個で1億文書が構成されています
  • 100万文書のWikipediaデータフォルダ1つを対象とする検索の場合、初回は20秒ほどかかりますが、2回目以降は2秒未満で高速に可能です。初回の検索時にインデックスデータがハードディスクからメモリにキャッシュされることで次回以降の検索が高速化されていると考えられます。
  • 全1億文書対象の検索時には数分程度かかります。これを高速化するには、ヒープメモリをさらに拡張する必要があるでしょう。

実証データ 〜 日本語Wikipedia 全件データを100倍に増幅 〜

  • 1億文書のWindowsファイルサーバを用意して、これを対象に全文検索インデックスを構築します。ただし、実際に1億文書を収集することは容易でありません。
  • そこで今回は、日本語Wikipediaの全エントリのデータ(約100万件)をダウンロードしてテキストファイルとしてファイルサーバ上のフォルダに展開し、このフォルダを100倍にコピーして、1億文書( = 100万文書 X 100 )のファイルサーバを構築しました。(実際には容量節約のため、コピーのかわりにシンボリックリンクを用いました。)

実証環境 〜 数年経過した普通の1Uサーバ 〜

  • 実証環境は、下記構成のホスト上に仮想マシンを作成しました。
    • VMWareホスト:FUJITSU PRIMERGY RX200 S6
    • Intel Xeon X5650 CPU(6core 2.67GHz)✕2 … 24vCPU
    • 96GB メインメモリ
    • 900GB SATA SSD ✕2
    • 大容量iSCSIドライブ(1000Gbps接続)
  • 仮想マシンは2台
    • 検索エンジン(Apache Solr)を主に稼働させる検索用ノード
    • 4VCPU メモリ8GB 仮想ハードディスク約100GB
  • FileBlogシステムを稼働させるノード
    • 2VCPU メモリ32GB 仮想ハードディスク(システム40GB/データ1TB)
    • Apache SolrのJavaヒープメモリ22GB

運用課題 〜 インデックスの差分更新に4日必要 〜

  • 実証環境では1億文書のインデックスの差分構築の実行には3日~4日かかりました。
  • 日常運用継続のためには、差分インデックス更新を週末48時間以内程度に高速化する必要がありますが、適切なスケジューリングやハードウェア選定によって十分実現可能な範囲でしょう。