スクリプツ・ラボ ホームページ > N-gram検索エンジン MindSearch > オンラインマニュアル > MindSearchHyperマニュアル


セッション管理



セッション管理

セッションとは
 MindSearchを使うアプリケーションがMindSearchデーモンと接続し、最初の INI: コマンドを発行した段階で新しいセッションが割り当てられます。MindSearchはそのセッション毎に動作モードや検索結果を記憶しています。セッション情報はアプリケーションが終了してMindSearchとの接続を切った後も保持されており、たとえばアプリケーションがページ遷移による画面表示のためにMindSearchと再接続した場合には先ほどの検索の続きの状態を再現できるようになっています。

 接続(コネクション)時間に比べ、セッション維持の時間は長くなります。MindSearchでは標準で2,000セッション分の情報を格納できる容量があります。セッション情報は内部でリングバッファで実現されており、1周すると古いものから上書きされます。1周するのに要する時間は検索頻度や検索ボタン押下から次のページ遷移までの時間などに左右されるため一概に決めることができませんが、デフォルトの2,000セッションは中規模のアプリケーションを想定したものです。

 MindSearchデーモン起動時に最大セッション数を明示することで、標準の2,000より大きくすることができます。操作の詳細は デーモンの起動(手動によるもの) を参照してください。
 最大セッション数はや無条件に大きくできるわけではありません。MindSearch内部では1セッションが1ディレクトリに対応しているため(tags/APPNAME/ 以下のサブディレクトリ)、OSのファイルシステムによる制約(1ディレクトリ内に幾つのサブディレクトリを作成できるかの制限)を受けます。Linuxのext3などの通常のファイルシステムでは5,000程度に抑えておくのが望ましいです。詳しくはOSのベンダーにお問い合わせください。

注:同時接続数の制限については上記セッション数とは別にライセンス上の制限になります

 セッションには一意の番号が付与され、MindSearchとアプリケーションの間で(API上で)やり取りが行われることがあります。これをセッション番号と呼びます。セッション番号は5桁の数値で00000から始まりデフォルトでは1999が最大値で次は再び00000に戻ります。これにより2000セッションまでを同時に識別できます。

セッション管理ディレクトリ
 mshyper/tags/ というディレクトリがあります。ここにはセッション管理のための各種情報が格納されています。ディレクトリ構成は以下のようになっています。
    +--- mshyper/
          |
          +--- tags/            ←セッション管理ディレクトリ
                |
                +--- app01/        ←プロフィール毎フォルダ
                |       |
                |       +-- tagnumber       ←次のセッショッン番号を記憶
                |       |
                |       +-- 00000/          ←セッション00000番対応フォルダ
                |       |     +--- セッション情報ファイル
                |       |     +--- セッション情報ファイル
                |       +-- 00001/          ←セッション00001番対応フォルダ
                |       |     +--- セッション情報ファイル
                |       |     +--- セッション情報ファイル
                |
                +--- xxxxx/        ←別のプロフィールフォルダ
                |       |
                |       +-- tagnumber       ←次のセッショッン番号を記憶
                |       |
              〜以下略〜 〜以下略〜
セッション管理ディレクトリ直下には、process.log と error.log という名前の二つのログファイルがありますが、これらログファイルについてはここでは説明しません
 インストール直後では、セッション管理ディレクトリの下に app01 というフォルダが一つ出来ていますが、このフォルダのことを「プロフィール」と呼びます。app01 はテスト用に最初から存在するプロフィールです。

 プロフィール名はASCIIで5文字固定長です。
 スクリプト内でプロフィール名を使うのは INI: コマンドの発行時です。新しいプロフィールフォルダはINI:コマンド発行時に自動作成されるのでアプリケーションが明に行う必要はありません。逆に自動的に削除されることはないため、不用になったフォルダは手動で削除してください。

 MindSearchエンジンを異なるプロジェクトのアプリケーションが利用する場合、別々のプロフィールを使うのは良い方法です。複数のアプリケーションが一つのプロフィールを共用すると管理番号がぐるっと1周してオーバーライトされる期間が短くなってしまいますが、別のプロフィールを使えばそのようなことを避けられます。
 また、開発の最終段階ではインデックス作成のためのアプリケーションを同様の理由から別のプロフィールとすることを薦めます。検索系の処理は起動頻度は高いですがその滞在時間は短いものです。一方でインデックス作成は頻度は低いのですが実行時間がかなり長くなり、セッション管理上はこれらは性格の異なる別アプリケーションと見ることもできます。

 各プロフィールフォルダの下に、tagnumber というファイルがあります。これはテキストファイルで、現在のセッション番号が数字列として記入されています。インストール直後はこのファイルは存在しませんが、この状態でセッションを開くと 00000 が割り当てられると同時にその値が記入されます。また 01999 の次は再び 00000 に戻ることで循環して使用されます。
 なお、セッション番号の最大値はデフォルトでは1999(セッション数=2000)ですが、デーモン起動時のオプション指定(msdemon起動時の -s オプション)でより大きな値を指定できます。検索頻度が高く、かつ、長い閲覧時間の後に[次ページ]ボタンが押されるようなアプリケーションでは2000より大きな値を指定してデーモンを起動するようにしてください。但し、最大管理セッション数はそのままディレクトリ数(tags/ ディレクトリ内に生成されるサブディレクトリ数)でもあるため、ファイルシステムによる制限が加わります。ext2, ext3 などのファイルシステムであれば1万程度に抑えることを薦めます。

 アプリケーションがMindSearchコアに接続し、新しいセッションが開かれるごとに、MindSearchは tagnumber ファイルを読み取り、その値に+1した番号をセッション番号として決定しします。またセッション番号そのものをフォルダ名とするような新しいフォルダを作成します。上の図にある 00000、00001、・・といったフォルダです。このフォルダの中に、各セッションに対応する情報が記入されます。
 セッション毎フォルダに格納される情報はさまざまです。たとえば、フィルタが使われるときのテンポラリファイルを格納したり、検索結果を格納したりといった用途に使われます。

セッションの観点からのアプリケーションの動き
 セッションの観点から見て、アプリケーションがどのようにして開始し、終了していくかを追ってみます。

[通常のアプリケーション]
 MindSearchを使う普通のアプリケーションは次のような手順により処理を進めます。
  1. プログラムの起動
  2. MindSearchと接続
  3. INIコマンドを発行
  4. STAコマンドまたはSTSコマンドを発行
    〜略〜(さまざまなスクリプトの実行)
  5. FINコマンドを発行
  6. MindSearchと切断
  7. プログラムの終了
 上の図で太字で書いた部分−−INIコマンドとFINコマンド−−がセッションに深くかかわるコマンドです。INIコマンドによってセッションが開始し、FINコマンドの実行によってセッションが終了します。(これらのコマンド自体の解説は、アプリケーションの開始・終了時のコマンド の章にあります)

[Webアプリケーション]
 Webアプリケーション(CGIやサーブレットによりWebサーバーを通じて検索サービスをおこなうもの)は次のように複雑な手順になります。以下の説明ではこのWebアプリケーションのことをあえてCGIと呼ぶとこにします。
  1. CGIの最初の起動
  2. MindSearchと接続
  3. INIコマンドを発行(短形式)
  4. STAコマンドを発行
  5. 検索コマンドを発行
  6. 最初の1ページ目の検索結果を送出
    GETコマンドを発行(検索結果の取得(1))
    GETコマンドを発行(検索結果の取得(2))
  7. SUSコマンドを発行(セッションIDを受け取る)
  8. MindSearchと切断
  9. CGIの終了   →ブラウザに画面が表示される

    -閲覧者がブラウザを眺めている-
    -閲覧者が[Next]ボタンを押す-

  10. CGIの2度目の起動
  11. MindSearchと接続
  12. INIコマンドを発行(長形式: SUSコマンドで受取ったセッションIDを使う)
  13. RESコマンドを発行
  14. 2ページ目の検索結果を送出
    GETコマンドを発行(検索結果の取得(3))
    GETコマンドを発行(検索結果の取得(4))
  15. SUSコマンドを発行
  16. MindSearchと切断
  17. CGIの終了   →ブラウザに画面が表示される
 上の図ではCGIは2度起動/終了を繰り返していますが(もっと続くこともあります)、この全体を通して1つのセッションであることに注目してください。
 通常のアプリケーションでは、MindSearchと切断する前にはFINコマンドを送出して終了通知を行いますが、Webアプリケーションの場合にはSUSコマンドを送出します。SUSとは「Suspend」の略で、ノートパソコンのサスペンド機能に良く似たものだとお考えください。つまり、ノートパソコンのふたを閉じて「サスペンド」し、他の場所に移動し、そこで再びノートのふたを開くと「レジューム」機能が働いて、以前の作業状態が復元するという概念とほぼ同じ機能をMindSearchは持っています。
 上の図で2度目の起動のブロックをご覧いただくと、INIコマンドの後でRESコマンドを発行していることが分かります。RESは「Resume」の略で、先のノートパソコンのレジューム機能と同様に、SUSコマンド発行時の環境を再現します。これにより、CGIは「さっきの続き」としての検索結果を取得することができるほか、それまでに設定した各種パラメータなども継続して有効になっているという特徴があります。
 また2度目の起動ブロックでは検索コマンドは発行しません。1度目で既に済んでいるため、ここでは単に検索結果の「取り出し」だけ行なえば済むからです。



同時接続するセッション数

 少しまぎわらしいのですが、前記した「セッション管理のためのセッション数」とは別に、ライセンス管理上のセッション数というものがあります。これは「同時接続できるセッション数」の意味です。
 乱暴に言うなら、[検索]ボタンを同時に何人が押すか‥という数に相当します。
 前記セッション管理は長時間にわたる管理ですがこちらはごく短時間の管理になります。
 セッション管理での「最大2000セッションまで管理できる」という能力とは別次元として、同時接続数がライセンスにより制限されています。たとえば、「MindSearch Hyper Runtime 100」というランタイムライセンスは、同時に100個のアプリケーションが同時に検索エンジンに接続してリクエストを出すことができます。



ログファイル

 ログは log/ ディレクトリ内に生成されます。
    +--- mshyper/
          |
          +--- log/            ←ログディレクトリ
                |
                +--- error.log             ←エラーログ
                +--- fatalerror.log        ←重大エラーログ
                +--- process.log           ←プロセスログ

プロセスログ
 process.log にはデーモンの起動と停止の状況、インデックス作成の状況が記録されます。以下はその例です。
-----------------------------------------------------------------------------------
2009-06-05 10:21:15 MSdaemon: localhost/3515 start       ←msdaemon起動
2009-06-05 10:21:15 Lockdaemon: localhost/3515 start     ←lockdaemonを起動
2009-06-05 10:21:15 Loader: localhost/3515 start         ←loader起動
〜略〜
2009-06-05 10:23:41 MSmkindex: start: idx=/home/foo..    ←インデックス作成開始
2009-06-05 10:23:41 MSmkindex: Filtr: idx=/home/foo..
2009-06-05 10:23:41 MSmkindex: Expnd: idx=/home/foo..
2009-06-05 10:23:41 MSdaemon: detect IDX 1
2009-06-05 10:23:41 MSmkindex: end:   idx=/home/foo..    ←インデックス作成終了
〜略〜
2009-06-05 11:15:39 MSdaemon: detect CAN                 ←msdaemonが停止要求を検出
2009-06-05 11:15:40 Lockdaemon: localhost/3515 finish    ←lockdaemon停止
2009-06-05 11:15:40 MSdaemon: localhost/3515 finish      ←msdaemon停止
2009-06-05 11:15:41 Loader: localhost/3515 finish        ←loader停止
-----------------------------------------------------------------------------------
ローダーログ
 loader.log にはローダーの動作記録です。以下はその例です。
-----------------------------------------------------------------------------------
2009-05-31 10:03:47 register @symweb
2009-05-31 10:03:50 loading /home/foo/mshyper/sample/indexes/web
2009-05-31 10:03:50 folder=mainA
2009-05-31 10:03:50 副インデックス無し
2009-05-31 10:03:50 主インデックスロード開始
2009-05-31 10:03:50 主インデックスロード終了
2009-05-31 10:03:50 主副合算ドキュメント数=76-0=76
-----------------------------------------------------------------------------------
エラーログ
 error.log には文字通りエラーが発生した場合にそれが記録されます。以下はその例です。
-----------------------------------------------------------------------------------
2008-02-08 14:00:14 MSservice: フィルタ処理でエラーが有りました(B)(sample.html: mfhtml)
-----------------------------------------------------------------------------------


Copyright(C) 2000-2008 Scripts Lab. Inc.