|

本プロジェクトでは、前回に開発された成果の全面的なリファクタリングを行い、ソースコードの見通しを高めた。またユーティリティクラス群は派生プロジェクトとして独立させ、Soya本体から分離した。
1 モジュールを簡便に開発するためのツール
モジュールは、Soyaに保存されるデータやメタデータを直接取り扱うリソース管理部(図3−1参照のこと)と、クライアントアプリケーションからのリクエストを取り扱うリクエスト受付部の間にあり、リクエストに応じた処理の選択・リソース管理の入出力を取り扱う。保存されるデータの統合やリソース管理部から読み出された情報の統合・処理などを行うことができる。

図3−1:Soyaの全体構造図
前年度の開発期間中にモジュールをSoyaで管理するところまでは開発が終了していた。本年度の開発期間中にはモジュールの開発をサポートするようなツールの作成をおこなった。その過程としてまずモジュールのリファクタリングを行った。
具体的には、モジュールの引数と返り値についてモジュールの実装から切り離し、アノテーションを用いて関連付けを行うだけにした。そしてモジュールにはデータやメタデータを直接処理するプログラムだけを記述すればいいように設計をしなおした。切り離された引数と返り値については、Beanで記述できるようにし、Beanを様々なフォーマットに変換できるようにした。具体的には、Beanを型としてRDFS・Java・PHP・JavaScriptに変換できるようにし、また値としてRDF・配列・文字列に変換できるように開発を行った。Beanを再利用することによって同じ型を利用するモジュールの開発が容易になり、言語間の可搬性も向上した。
その後、モジュールの引数と返り値に利用されるBeanを作成するためのツールと、モジュールとBeanの結び付けを行って、モジュールの雛形を作成するためのツールを開発した。
2 Soyaを分散環境で利用するための仕組み
前年度の開発期間中には、ネットワークインターフェースとしてSOAPRPCやJSONRPCを実装した。本年度の初期の計画では、オーバーレイネットワークを作成し、ある一つのSoyaに対して行われた検索を、「自動的に」他のSoyaに対しても伝播させ、分散環境で利用できるような仕組みの提案を行った。しかし、本年度中には、モジュール関係のリファクタリングとあわせて、Beanによる型情報の共有までにとどまった。
3 ドキュメント・開発環境の充実
前年度の開発期間中には作成できなかった、Soyaの背景からSoyaの利用方法までの詳細なドキュメントを作成した。また、ユーティリティライブラリをSoya本体から分離し、Soya本体の見通しをよくした。特にKaibashiraについてはユーティリティライブラリとは別にプロジェクト化し、速度向上のためにRuby版Kaibashiraの開発を行った。また前年度には完全に実装されていなかったSPARQLの実装も行った。
4 速度の向上
全体的なリファクタリングと、データベースの最適化によって、前年度の開発成果よりも大幅に速度が向上した。特に、100万ノードを超えると速度がまったくでなくなっていた現象を解決し、200万ノード格納されている状態でも、1秒以内には返答が来るようになった。
図2に前年度版の速度と本年度版の速度を比べた図を示す。速度の計測は、CPU/Xenon3Gのデュアル構成・メモリー/2ギガバイト・OS/SuSELinux9という構成のマシン上で行った。検索対象のノードは10ノード・1万ノード・100万ノード・200万ノードとしWordNetのRDFを利用した。実行するクエリは、
SELECT *
WHERE (?x wns:hasWordForm ‘accept’)
という非常に単純で、答えが一つしかないものを利用した。それぞれのノード数格納されているSoyaに対して上記クエリーを行うモジュールを呼び出す単純なスクリプトを同一マシン上から実行し、それぞれ10回計測を行って、その平均をとった。
結果としては、特に100万ノードを超えるような計測を行ったとき平均値で約33倍早くなり、実用レベルで問題なく利用できる速度に達したと判断した。

図 3−2 Soyaに格納されたノード数に対する速度の変化
5 開発成果の特徴
前年度中に、実現したSoyaで提供されている機能を列挙する。
·
呼び出し手法に対する依存性の排除(POST/GET/REST,SOAP)
·
全モジュールをWebサービスで提供
·
サービス指向アーキテクチャーによる拡張可能性の確保
·
データベースへの依存性の排除(PostgreSQL,MySQL)
·
RDF(メタデータ,RDF
Schema,Ontology)の格納、取得、利用
·
データのフォーマットに対する依存性の排除
·
リソースへの一意なURIの発行
·
SQLによるデータの検索
·
RDQLによるシングルモデル検索
·
TriQLによるRDFのマルチモデル検索(Kaibashira)
·
名前つきGraphの実装
本年度開発した機能を次に列挙する。
·
引数と戻り値を定義するためのBeanの導入
·
Bean作成ツール
·
Module作成ツール
·
RDFモデル検索言語SPARQLによる検索(Kaibashira)
本年度は、前年度の成果物に基づいて、その安定性を向上させるとともに、モジュール関連の機能を全面的にリファクタリングしBeanを導入することで、モジュールの可搬性、再利用性を高めた。また、それにあわせてツールを作成することで開発を簡便に行えるようにした。
|