全文検索エンジンを利用した ファイルシステムの名前空間拡張 電気通信大学 大学院 情報システム学研究科 多田研究室 滝田 裕 ・ 多田 好克 発表の流れ 研究の動機 関連研究 設計 実装 評価 今後の課題・まとめ 研究の動機 近年のストレージ事情 ディスク容量とファイル数の増大 この10年のディスク容量の増加率は60~70%/年 MicrosoftのWinFS関連文章では70%/年 Impress AKIBA PC Hotline!によると60%/年 発売週 1998/05/30 2005/06/18 型番 IBM DTTA-351680 Hitachi HDS725050 容量 16.8GBytes 500GBytes 価格 99,800 35,580 ファイル数も35年前は約10,000個→現在はその数十~数百倍 ファイルの名前管理 ディレクトリによる階層化 木構造をもつ UNIXでは35年前から変わらない すでにファイルを管理できなくなっている ファイルの検索 内容からファイルを特定 find + grep その場ですぐ検索できる 低速で検索結果が利用しにくい 全文検索エンジン 高速、高機能 インデックスの準備、要ブラウザ より使いやすい検索が必要 検索とファイルシステムの統合 ファイル名を使ったファイル検 索 ディレクトリ名が検索キーワード 動的にディレクトリ生成 全文検索エンジンで検索 検索結果はシンボリックリンクで 表現 既存の木構造の名前空間と 検索による仮想的な名前空間 を共存 書き込み時の検索インデック ス自動更新 関連研究 Semantic file system ディレクトリ名による検索 NFSサーバとして実装 検索したい属性とキーワードを 別ディレクトリで指定 (A-Vペア) A-Vペアは動的に生成される仮 想ディレクトリ 既存のファイルツリーの一部と してマウント Crawlerによるインデックス 更新 HAC (Hierarchy and Content) Semantic directoryによる検索 属性に検索クエリーを持つ特殊なディレクトリを利用 ディレクトリ自体は既存のディレクトリとして存在 ファイルの追加、削除で検索インデックスの変更可能 DLLで実装され、使用前にプリロード WinFS Microsoftの次世代Windows 用ファイルシステム バックエンドにSQLサーバを 使用 SQLサーバで属性を管理 SQLベースの検索 既存の木構造ディレクトリと 独立 設計 ファイルの内容に基づく名前空間 ディレクトリで検索キーワードを指定 プレフィックスで検索キーワードディレクトリを判別 “.../:keyword=word/...” :keyword= word プレフィックス 検索キーワード 検索キーワードディレクトリは動的に生成 アクセスするまで存在しない 書き込み権限がないディレクトリでも生成可能 プレフィックスの種類 プレフィックス :keyword= 検索 完全一致 value :prefix= 前方一致 value* :inside= 中間一致 *value* :suffix= 後方一致 *value :regex= 正規表現 /value/ :subject= フィールド指定 +subject:value :from= フィールド指定 +from:value :message-id= フィールド指定 +message-id:value Namazu検索式 複数キーワード検索 検索キーワードディレクトリの連接はAND検索 “.../:keyword=A/:keyword=B/” A and B 逆ポーランド記法により複雑な検索式を表現 演算子ディレクトリ:and, :or, :notの導入 “.../:keyword=A/:keyword=B/:and/” “.../:keyword=A/:keyword=B/:or/” “.../:keyword=A/:keyword=B/:not/” Namazuの演算子notは二項演算子 A and B A or B A not B 検索結果の表現 検索結果はシンボリックリンクで表現 シンボリックリンクの命名法 “nnn:filename” nnn filename 検索適合順位 元のファイル名 検索適合順位を入れることで名前の衝突を回避 ファイルの絞り込みと結果の制限 ファイルパスによる絞り込み アクセス権限による絞り込み 検索キーワードディレクトリの前にある通常のディレク トリを検索範囲の限定に使用 検索しているユーザがアクセスできないファイルは検 索結果から除く 検索結果の制限 検索結果のうち上位50件のみ表示 以降は:whence=, :max=, :allを用いて表示 実装 システム構成 NetBSD 1.6.2上で実装、全文検索エンジンとしてNamazuを利用 search filesystem ディレクトリ名を使った検索機能を提供 indexing filesystem 書き込みに伴い、ボリュームごとに用意した検索インデックスを更新 search filesystem マウント時にデーモンプロセス生成 検索プログラムの起動を担当 検索キーワードディレクトリへのアクセスをフック(vノードスタック) デーモンプロセスとの通信はソケットを利用 ディレクトリエントリの生成&既存ディレクトリとの合成 search filesystemのファイル操作処理 既存ファイルへのアクセスは下層fsへ 検索キーワードディレクトリのアクセスのみ処理 lookup プレフィックスの検出、vノード生成 readdir 検索プログラムの起動、検索結果の合成 readlink取得済みの検索結果を出力 getattr 適当なファイル情報を出力 仮想ディレクトリの扱い 親ディレクトリへのエントリ追加 親ディレクトリをキー、仮想ディレクトリ名を値とした ハッシュ表(仮想ディレクトリエントリ)を使ってエントリ 合成 ディレクトリの所有権を無視 仮想ディレクトリは勝手に消滅 vノードが再利用される際に仮想ディレクトリエントリを 消去 rmdirによる手動消去も可能 indexing filesystem マウント時にデーモンプロセス生成 mknmzによる検索インデックスの更新 差分更新可能な修正版mknmzを使用 書き込みフック(vノードスタック) 検索インデックスは各ボリュームのrootに配置 評価・考察 評価について ソースコード量、オーバーヘッド、検索時間で評 価 評価環境 Pentium4 1.7GHz, 512MB memory, 20GB HDD NetBSD 1.6.2, Namazu 2.0.14 対象 /usrに含まれるファイル(187,397個)の内10,579個 ソースコード量 ファイルシステム search indexing overlay overlay+layerfs portal portal+genfs カーネル デーモン 3959 1365 2478 791 599 2517 1186 1915 2928 1915 portal+genfsと変わらない程度のソースコード量 機能削減分、デーモンは縮小 ファイルシステム化オーバーヘッド ディレクトリ /usr/shar/man/man7 /usr/shar/man/man1 /usr/shar/man/man9 /usr/shar/man/man3 N 31 483 694 1900 ufs 0.28 1.15 1.48 3.01 +index 0.29 1.21 1.55 3.47 +search 0.32 1.69 1.98 5.15 通常ディレクトリの参照で比較 エントリ数にほぼ比例する形でオーバーヘッド増大 indexing fs+search fsの場合、エントリ数1,900で参照 時間はufsの1.7倍 検索時間 ディレクトリ /usr/:keyword=purple /usr/:keyword=bold /usr/:keyword=track /usr/:keyword=root /usr/:keyword=list N 6 102 336 980 検索 0.84 3.00 8.26 22.43 参照 1.26 4.30 12.02 43.27 3053 68.68 222.75 Namazu検索にかかる時間は件数に比例 件数が少ない場合、参照時間は検索時間の1.5倍程度 :all参照時間はおよそ件数の二乗に比例 表示件数制限により性能改善 :all 1.27 5.06 20.71 203.92 16604.00 今後の課題 複数のファイル名を持つファイルの内容更新 多言語対応 現状では最後にアクセスした名前しかわからない Namazuを日本語用として設定 ユーザのlocale情報取得で対処可能? より高度な検索への対応 全文検索以外の検索にも利用可能? まとめ ファイル内容に基づく名前空間を提案した NetBSD+Namazuで実装 既存ディレクトリと共存 search fs: 検索機能の提供 indexing fs: 検索インデックスの更新 既存アプリケーションに検索機能を提供 考察 類似機能であるデスクトップ検索と比較 デスクトップ検索(googleデスクトップなど) 完全にユーザ空間で動いている 対応アプリケーションしか利用できない 本システム すべてのアプリケーションで利用可能 検索時間の隠蔽ができない アプリ側のファイルオープンをマルチスレッド化 件数の二乗に比例する理由 vノードの管理 portal fsのコードを流用してハッシュで管理 ハッシュのキーは下層fsのvノードポインタの値 search fsの作る仮想ディレクトリは下層fsがない 実は単方向リストで仮想ディレクトリの管理を行っていた 仮想ディレクトリアクセス時にvノードの存在確認が行わ れる 初めてアクセスした場合、リストを全て検索 参照にかかる時間は (仮想ディレクトリの数)×(リストの長さ) ≒(件数)^2
© Copyright 2024 ExpyDoc