GLOBALBASEマニュアル集
>>
gbspエージェント・リファレンス・マニュアル
2008-07-09版
gbspエージェント・リファレンス・マニュアル
著者:
森 洋久 / joshua at globalbase.org ※
*
目的と概要
*
このマニュアルを読むために必要な知識
*
前提となるシステム用件
*
gbspにおけるインデックスの構造について
*
インデックスへのアクセス
*
登録動作概要
*
登録動作における各エージェントの役割
*
gburlの動き
*
gboarの動き
*
基本オペレーション
*
履歴
目的と概要
gbspはGLOBALBASE LANDSCAPEサーバおよびその周辺のネットワークコンテンツを収集し、インデックス化するスパイダリング機能を有するエージェントです。gbspは各GLOBALBASE LANDSCAPEサーバに組み込まれ、自身のサーバの周辺を小規模にスパイダリングします。これらのデータをサーバ型P2P技術により、共有し、全体の情報が検索可能となります。この基本機能をこのマニュアルにまとめます。
▲
ページトップへ戻る
このマニュアルを読むために必要な知識
GLOBALBASE LANDSCAPE SERVER
に関する知識、
xlスクリプト
に関する知識が必要です。
▲
ページトップへ戻る
前提となるシステム用件
GLOBALBASE LANDSCAPE SERVER
▲
ページトップへ戻る
gbspにおけるインデックスの構造について
gbspは基本機能として、文字列を与えると、それに対応するバイナリデータを返すデータベースを提供します。これがgbspにおける一番基本的なインデックスになります。文字列は辞書順による範囲検索が可能です。この範囲検索を利用し、ディレクトリ構造を実現することが出来ます。たとえば、ディレクトリ root.addr の下のデータをリストアップする場合、root.addr[st] からroot.addr[end] の間を検索します。ただし、[st]はどの文字よりも小さいコードを示し、[end]は殿文字よりも大きいコードを示します。
gbspにおいて、内部もツリー構造をもったデータ構造によりディレクトリを直接実装しないのは、検索対象を表現するディレクトリのデリミタが各種存在し、特定できないからです。たとえば、ドメイン名の場合は「.」、ファイルシステムの場合は「/」URLのポート番号は「:」といった具合です。
また、検索されるデータの識別子として、ディレクトリパス名=検索文字列そのものを利用出来ることから、IDの管理が一元化できるというメリットもあります。ディレクトリのツリー構造の途中に新たなディレクトリを作成するのが容易になります。たとえば、root.addr.ipv4 というディレクトリはあるが、root.addrというディレクトリはないという状態であった場合に、新たに、root.addrというディレクトリを構成し、その直下のディレクトリにroot.addr.ipv4を加える場合、単純にroot.addrぽいう文字列をインデックスに加えるのみで対応できます。
このようなディレクトリの実装方法を導入しますと、gbspにおけるディレクトリとは、以下に述べる決まったルールに従ってインデックスに登録された文字列のセットと考えることが出来ます。
では以下に、インデックスの構造の実際を見ていきましょう。
まず、[st],[end]に相当するコード、その他のコードとして、ソースコードsrc/h/spidering.h内に以下のものが定義されています。
LC_SECC_HEADER これより小さいコードは使ってはいけない。(負のコード)
LC_SECC_TERMINATOR これより大きいコードは使ってはいけない。(正のコード)
そのほかに、ディレクトリ検索を行うための各種コードが定義されている。
LC_SECC_INFO_START 文字列検索結果のデータ各種を納める位置の最初を示すコード
LC_SECC_INFO_END 文字列検索結果のデータ各種を納める位置の最後を示すコード
LC_SECC_EMPTY_FROM 文字列の存在していない位置の最初を表すコード
LC_SECC_EMPTY_TO 文字列の存在していない位置の最後を示すコード
文字列1の示すディレクトリおよびディレクトリ以下の情報を表す文字列の範囲は、「文字列1 LC_SECC_HEADER LC_SECC_INFO_START」 から 「文字列1 LC_SECC_TERMINATOR LC_SECC_INFO_END」の範囲となる。
一方、LC_SECC_EMPTY_FROM, LC_SECC_EMPTY_TO はキャッシュ時に、情報の無い範囲を示すために使われ、 「文字列1 LC_SECC_TERMINATOR LC_SECC_EMPTY_FROM」から、「文字列1より大きい文字列 LC_SECC_HEADER LC_SECC_EMPTY_TO」の間にはデータがないことを示している。
最後に、ディレクトリの個別情報として、以下のコードが定義されている。
LC_SECC_READDIR このディレクトリ配下のディレクトリ情報
LC_SECC_AGENT このディレクトリを管理するエージェント名を指定する。
LC_SECC_READDIRは、「文字列1 ディレクトリ文字列」という文字列が存在する場合、「文字列1 LC_SECC_HEADER LC_SECC_READDIR ディレクトリ文字列」という形で登録し、「文字列1 ディレクトリ文字列」という文字列が存在すること示している。文字列1の直下のディレクトリのみを検索したい場合、「文字列1 LC_SECC_HEADER LC_SECC_READDIR LC_SECC_HEADER」から「LC_SECC_HEADER LC_SECC_READDIR LC_SECC_TERMINATOR」の間を検索すればよい。
LC_SECC_AGENTは、文字列1より下のディレクトリに管理エージェントを示している。「文字列1 LC_SECC_HEADER LC_SECC_AGENT エージェント名」という文字列として表される。
gbspのインデックスにおいてはプリセットされている文字列(ディレクトリ)がある。以下のものである。
root
root.addr
root.addr.ipv4
root.addr.ipv6
root.queue
root.queue.myurl
root.queue.url
root.data
▲
ページトップへ戻る
インデックスへのアクセス
ディレクトリに対するオペレーションは
インデックスを開く
XL関数(環境)(SPdatabasePath)
アクティブなエージェントをgbspに登録する。
XL関数(環境)(SPdefineAgent)
カレントディレクトリを変更する。
XL関数(環境)(SPcd)
ディレクトリを作成する
XL関数(環境)(SPcraetePath)
ディレクトリを削除する
XL関数(環境)(SPdeletePath)
ディレクトリに情報を書き込む
ディレクトリの直下のディレクトリのリストを取得する。
XL関数(環境)(SPls)
ディレクトリを管理するエージェントを加える。
XL関数(環境)(SPpermitAgent)
ディレクトリを管理するエージェントを削除する。
XL関数(環境)(SPforbitAgent)
以上である。 1.〜3. 以外は対象のディレクトリの管理エージェントのみが直接実行可能である。その他のエージェントがこれらのオペレーションを実行した場合、管理エージェントにその旨の情報が知らされる。管理エージェントはオペレーションをチェックし、「拒絶」、「承認後、管理エージェントによる代行実行」のいずれかが取られる。管理エージェントの動作は管理エージェントの実装依存である。
管理エージェントは一つのディレクトリに複数あってもよい。また、管理エージェントによる代行実行時に新しい管理エージェントを登録することも可能である。
▲
ページトップへ戻る
登録動作概要
LANDSCAPEサーバ
において、gbspを中心とした登録動作について述べます。登録動作はgbspのみならずLANDSCAPEサーバの他のエージェントも係ってきます。とりあえずこの節では各エージェントの役割には特に触れず全体の動きに着目した説明を行います。次節にて各エージェント役割を追いながら登録動作について説明を試みます。
gbspを搭載したLANDSCAPEサーバに対しては、検索を始める最初のURLを与える必要があります。その方法には、二つあり、gbspのセッティングにおいて、一つURLを与えるという方法と、LANDSCAPEサーバにおいて既に用意されている、 gbmp [UNDEF REF (gbmp)]からの情報で、LANDSCAPEサーバ上の位置を得ることができます。
まずLANDSCAPEは、この最初のURLをgbspインデックス、root.queue.myurlに記録します。次にこのURL中のリンクをたどり、次のURLを得、root.queue.myurlに記録します。最初のURLをホップ0とし、次に見つかったURLをホップ1として、ホップ数を同時に記録していきます。同じURLにたどりつくは複数のパスが存在する可能性があります。その場合、より少ない方のホップ数を記録します。
LANDSCAPEはサーバ型P2Pシステムを基本としていますので、複数のLANDSCAPEサーバが一つのURLネットワークを検索、同じURLをインデックス化する可能性があります。さらにそのインデックスをサーバ同士で交換します。そうした場合、見つけたURLを管理するサーバを決定するとき、よりホップ数が少ない方のサーバが担当するというルールになっています。このためホップ数とともにgbspの識別子を記録し、一番ホップ数が少ないLANDSCAPEサーバから順番に決められた数の複数のサーバが担当となります。
root.queue.myurlに登録されたURLは定期的にアクセスされ、存在しているかのチェックのあと、URLの書誌情報、URLのコンテンツ内の地物の属性情報がURLの指し示す先から取得されます。取得された属性情報は、root.dataの下にNグラム法によって分解された文字列として格納されます。URLの存在チェックが5回エラーとなると、このURLはインデックスから削除されます。
root.queue.myurlにおいては、サーバのアドレスも管理されます。URLから、プロトコル、サーバ名、ポート番号部分が抜き出され、URLの親ディレクトリとして登録されます。サーバ名はDNSによりアドレス変換され、プロトコル+アドレス+ポート番号 に変換され、root.addrの下に登録されます。root.addrは他のLANDSCAPEサーバからも情報を収集し、IPアドレスのキャッシュを構成します。IPアドレスは通し番号であることから、ここを検索すると、GBサーバやWWWサーバが世界にどのようなものがあるかがわかります。この機能を使い、すべてのgbspを持ったLANDSCAPEサーバを検索し、クエリを投げることにより各種属性値の検索エンジンが実現します。
▲
ページトップへ戻る
登録動作における各エージェントの役割
本節では、登録動作においてどのようなエージェントがどのよな場面で動作するかについて述べる。まず最初に、存在するエージェントについて概略を述べる。
gbsp
GB Spidering
本マニュアルのエージェントである。スパイダリングに関係するインデックスを管理するエージェントである。インデックスに対する情報の登録、読み出し、タイマーによるトリガ命令をサポートしている。
gbmp
GB Management Processor [UNDEF REF (gbmp)]
GLOBALBASE LANDSCAPEサーバに存在するコンテンツ、とくにmapファイルによる地図同士の接続に関して管理を行っているエージェント。存在するサーバ上のコンテンツすべてについて情報を持っているので、このエージェントがgbspをトリガーすることによってコンテンツ収集が始まる。
gburl
GB URL manager
収集されたコンテンツを、サーバ、ディレクトリ、リソースに分解し、gbspを通じてインデックスに登録する役目を持つ、さらに、次に述べるgboarエージェントを起動する。
gboar
GB Object Attribute Retriver
gburlによって起動され、各リソースの属性情報、および、リソースの含む地物の属性情報を収集し、インデックス化する。
gbaddr
GB Address Management
サーバアドレスの管理を行うエージェントである。
次にこれらのエージェントの動きを説明します。
インデックスには
「gbspにおけるインデックスの構造について」
で述べているように、あらかじめ決められたディレクトリが存在します。gbspは起動すると、まずこのディレクトリが存在するかをチェックし、存在しない場合はこれらを生成する。次に各ディレクトリの管理エージェントを以下のように割り当てます。
root gbsp
root.addr gbaddr
root.addr.ipv4 gbaddr
root.addr.ipv6 gbaddr
root.queue gbsp
root.queue.myurl gburl
root.queue.url gburl
root.data gboar
以上のような初期化を行った後gbspは待機状態になります。 LANDSCAPE全体としての動きでは最初に、スパイダリングを開始するURLが必要です。一つの考え方は、gbmpが定期的に収集しているURLからスパイダリングを開始するというものです。この場合、gbmpは、gbspに対して、このURLに基づくディレクトリをroot.queue.myurlの下に
SPcreatePath
により生成しようとします。root.queue.myurlの管理エージェントはgburlでありgbmpではないので、gbspは直接は生成はせず、管理エージェントのgburlに生成要求があったことを伝えます。
gburlはこれを受けとり、URLに対応するディレクトリを生成するまえに、URLよりプロトコル+サーバ+ポートのセットを生成し、この三つの組み合わさったサーバに対応するディレクトリを生成し、その下に、URLのディレクトリを生成します。これらのディレクトリの管理エージェントおよびトリガー・エージェントとして自分自身gburlとする一方で、リソースにあたるところにはトリガー・エージェントとしてgboarを設定します。これにより、定期的にURLはgburlおよびgboarによってチェックされ、もし、urlの先のリソースが消されている場合は、インデックスの対応するディレクトリも消されます。
一方、DNSによりサーバの名前よりアドレスを引き、それを、
SPcreatePath
により、root.addrの下への登録を試みます。同様にgbspはこれを保留し、エージェントgbaddrへ伝えます。
▲
ページトップへ戻る
gburlの動き
gburlの詳しい動作は [UNDEF REF (gburl)]で行います。スパイダリングのための動作の概要について述べます。gburlはSPcreatePathトリガーを受信すると、自分の担当のpathか、正しいpathかをチェックします。そして、正しいと判断されれば、新しいpathを生成します。あたらしpathは自分自身を管理エージェントとし、また同時にトリガー・エージェントとしてタイマーを設定します。タイマーは初期値0秒、インターバルは所定のインターバル値が設定されます。
gburlにタイマー・トリガーがかかった場合、gburlはトリガーの発生したpathについてpathの指し示すURLにはリソースが存在するかをチェックします。存在しないとなると、存在していない時間情報をカウントアップします。この情報がタイムアウトを超えていると、gburlはこのpathを削除します。
pathが存在している場合、かつ、オブジェクトリソース(.lst,.vctリソース)をさしている場合、gboarを起動します。gboarには、pathをパラメータにエージェント起動トリガーを送ります。gboarはpathに対応するURLのオブジェクトを取得し、オブジェクト中の属性を、root.dataの下にインデックス化します。
一方、gburlは取得したpathの対象となるURLにリンクされているマッピング(.mapリソース)、またその先の座標系(.crdリソース)、オブジェクトリソース(.lst,.vctリソース)を検索し、root.queue.myurlに登録する。もし、既に登録されているURLで会った場合は、ホップ数をチェックし、ホップ数を満たすものであれば、当該エージェントの動作するサーバアドレスとともにホップ数を記録する。ホップ数が既に登録されているホップ数より上回った場合は、特になにもしません。
またgburlは得られたパスの対応するURLの示すサーバのIPアドレスを解決する。このIPアドレスとともに、gbaddrエージェントを起動するトリガーを送ります。
▲
ページトップへ戻る
gboarの動き
gboarは.lst,.vctリソースの管理対象とするオブジェクトの中身をすべてroot.dataの下にインデックス化する。オブジェクトの種類は多種多様なので、現在サポートしているオブジェクトの種類はこのgboarで処理するが、その他のオブジェクトの種類のインデックス化が必要になった場合は、対応する別のエージェントを起動することもある。
gboarはオブジェクトの中の属性を呼び出している間に、URLを発見した場合、このURLをrootl.queue.myurlに登録する。結果的にgburlが起動される。
▲
ページトップへ戻る
履歴
日時:
2008-07-09
マニュアル生成。(2008-07-09版)
--
日時:
2008-06-20
著者:
森 洋久
/ 反映されたバージョン:
ver.B.b17.04
このマニュアルを作成。ver.B.b17.04よりこのマニュアルをアップしますが、実際はgbspはまだ動作しません。
--
▲
ページトップへ戻る