BH12.12/SPARQLthon8/TogoGenome-Virtuoso7

提供:TogoWiki

移動: 案内, 検索

BSBM 2013/03 版 http://wifo5-03.informatik.uni-mannheim.de/bizer/berlinsparqlbenchmark/results/V7/ の 4. Benchmark Results for the Explore Use Case の表にあるロード時間をみると Virtuoso 7 は Virtuoso 6 や OWLIM-SE と較べてロード時間が5〜10倍くらい改善されている。また、ようやく SPARQL 1.1 に対応し、BIND や property paths などの必須機能が利用できるようになった。

目次

インストール

オープンソース版

% git clone git://github.com/openlink/virtuoso-opensource.git
% cd virtuoso-opensource
% git checkout develop/7
% sh autogen.sh
% ./configure --prefix=/path/to/install/directory --with-readline
% make
% make install
% vi /path/to/install/directory/var/lib/virtuoso/db/virtuoso.ini
% (cd /path/to/install/directory/var/lib/virtuoso/db; /path/to/install/directory/bin/virtuoso-t)
% isql 1111  # ポート番号は virtuoso.ini で設定したもの
SQL> shutdown;

make の最後で Connect failed to localhost:1111 のような理由で

***FAILED: starting DB.DBA.VAD_PACK('vad_dav.xml', '.', 'conductor_dav.vad')

などが表示される場合は

% sudo make

してみるとよい。

商用版

% mkdir virtuoso7
% cd virtuoso7
% cp /path/to/download/virtuoso.tar .  # 本体 (DL 時は lovpz2zz.tar のようなファイル名)
% cp /path/to/download/virtuoso.lic .  # ライセンスファイル (DL 時は download-data.vsp のようなファイル名)
% tar xvf virtuoso.tar
% sh ./install.sh
% vi database/virtuoso.ini
% bin/virtuoso-start.sh
% bin/virtuoso-stop.sh

なお、Mac 版では、アプリは /Applications/Virtuoso 7.0.app/ にインストールされるが、ライセンスファイル virtuoso.lic は

  • /Applications/Virtuoso 7.0.app/Contents/virtuoso/bin/virtuoso.lic

ではなく

  • /Library/Application Support/openlink/bin/virtuoso.lic

に置く必要があるので注意。

virtuoso.ini の変更点

[HTTPServer]
ServerPort  = 10000 ← http での接続ポート (SPARQL endpoint - http://localhost:10000/)

[Parameters]
ServerPort  = 10001 ← isql での接続ポート (管理用コマンドライン - isql 10001)

[Parameters] ↓ ロードする RDF データの置いてあるディレクトリを追加する
DirsAllowed  = ., ../vad, /path/to/your/rdf/directory

[Parameters] ↓ メモリに応じて適切な値のもののコメントアウトを外す
;; Uncomment next two lines if there is 32 GB system memory free
NumberOfBuffers  = 2720000
MaxDirtyBuffers  = 2000000

[Client] ↓ 適当に増やす
SQL_PREFETCH_ROWS  = 10000
SQL_PREFETCH_BYTES = 160000

[SPARQL] 
;MaxQueryCostEstimationTime = 400  ←オープンソース版の場合にコメントアウトし無制限とする。見積もり間違いによりエラーになることを防ぐ。商用版はデフォルトで無制限。
MaxSortedTopRows  = 200000 ← 追記する。ソート対象行が多いクエリでエラーになるのを防ぐ

なお、オープンソース版に標準添付される virtuoso.ini では

;; Uncomment next two lines if there is 16 GB system memory free
;       NumberOfBuffers          = 1360000
;       MaxDirtyBuffers          = 1000000

のように行頭に空白があるが(2013/8/11追記:stable/7 では空白はなくなっていた)、

;; Uncomment next two lines if there is 16 GB system memory free
NumberOfBuffers          = 1360000
MaxDirtyBuffers          = 1000000

のように ; だけでなく空白も削除しないと認識されないので注意。Conductor の画面を開いて、System Admin > Parameters > Parameters のパネルに NumberOfBuffers などの項目が表示されておらず、少し大きな RDF のロードに失敗する場合はこの点を確認すると良い。

また、実際に実行すると速いはずのクエリが、

Virtuoso 42000 Error The estimated execution time 147515 (sec) exceeds the limit of 400 (sec).

のようなエラーで実行できない場合は、MaxQueryCostEstimationTime を増やすか、

;MaxQueryCostEstimationTime     = 400   ; in seconds 

のようにコメントアウトして無制限にすればよい。


RDF データのインポート

TogoGenome 関連のデータをロードする。

% isql 10001
Connected to OpenLink Virtuoso
Driver: 06.01.3127 OpenLink Virtuoso ODBC Driver
OpenLink Interactive SQL (Virtuoso), version 0.9849b.
Type HELP; for help and EXIT; to exit.

# RefSeq の原核のゲノム
SQL> ld_dir_all('/data/store/rdf/togogenome/refseq/prokaryotes.ttl', '*.ttl', 'http://togogenome.org/refseq/');
SQL> rdf_loader_run();
Done. -- 6786211 msec. → 113分

# UniProt のオントロジー
SQL> ld_dir('/data/store/rdf/uniprot/current/uniprot_unzip/', '*.owl', 'http://togogenome.org/uniprot/');
SQL> rdf_loader_run();
Done. -- 187 msec.

# UniProt のメタデータ
SQL> ld_dir('/data/store/rdf/uniprot/current/uniprot_unzip/', '*.rdf', 'http://togogenome.org/uniprot/');
SQL> rdf_loader_run();
Done. -- 211537 msec. → 3.5分

# UniProt のゲノムあり原核エントリ
SQL> ld_dir('/data/store/rdf/togogenome/uniprot/current/prokaryotes', '*.ttl', 'http://togogenome.org/uniprot/');
SQL> rdf_loader_run();
Done. -- 9694029 msec. → 162分

SQL> log_enable(3, 1);
Done. -- 0 msec.

# Gene Ontology (http://obofoundry.org/cgi-bin/detail.cgi?id=biological_process)
SQL> DB.DBA.RDF_LOAD_RDFXML_MT(file_to_string_output('/data/store/rdf/togogenome/ontology/go/go.owl'), '', 'http://togogenome.org/go/');
Done. -- 27909 msec.

# Sequence Ontology (http://obofoundry.org/cgi-bin/detail.cgi?sequence)
SQL> DB.DBA.RDF_LOAD_RDFXML_MT(file_to_string_output('/data/store/rdf/togogenome/ontology/so/so.owl'), '', 'http://togogenome.org/so/');
Done. -- 4765 msec.

# NCBI Taxonomy (http://www.obofoundry.org/cgi-bin/detail.cgi?id=ncbi_taxonomy)
SQL> DB.DBA.RDF_LOAD_RDFXML_MT(file_to_string_output('/data/store/rdf/togogenome/ontology/ncbitaxon/ncbitaxon.owl'), '', 'http://togogenome.org/ncbitaxon/');
Done. -- 185126 msec.

# MCCV オントロジー
SQL> DB.DBA.TTLP_MT(file_to_string_output('/data/store/rdf/togogenome/ontology/MCCV/mccv.ttl'), '', 'http://togogenome.org/mccv/');
Done. -- 42 msec.

# MEO オントロジー
SQL> DB.DBA.RDF_LOAD_RDFXML_MT(file_to_string_output('/data/store/rdf/togogenome/ontology/MEO/meo.owl'), '', 'http://togogenome.org/meo/');
Done. -- 52 msec.

# MEO データ
SQL> DB.DBA.TTLP_MT(file_to_string_output('/data/store/rdf/togogenome/ontology/MEO/gold2ontology2.ttl'), '', 'http://togogenome.org/meo/');
Done. -- 311 msec.

# MPO オントロジー
SQL> DB.DBA.RDF_LOAD_RDFXML_MT(file_to_string_output('/data/store/rdf/togogenome/ontology/MPO/mpo.owl'), '', 'http://togogenome.org/mpo/');
Done. -- 23 msec.

# MPO データ
SQL> DB.DBA.TTLP_MT(file_to_string_output('/data/store/rdf/togogenome/ontology/MPO/gold_all_mpo.ttl'), '', 'http://togogenome.org/mpo/');
Done. -- 1949 msec.

# トリプル数
SQL> sparql select count(*) where {?s ?p ?o.};
1783201195  → 17.8億トリプル
1 Rows. -- 146294 msec. → 2.5分

# EdgeStore のデータ
SQL> ld_dir('/data/store/rdf/edgestore', '*.ttl', 'http://togogenome.org/edgestore/');
SQL> rdf_loader_run();
Done. -- 13550101 msec. → 225分

# トリプル数
SQL> sparql select count(*) where {?s ?p ?o.};
3099420204 → 30億トリプル
1 Rows. -- 939793 msec. → 16分

# トリプル数再計算(ポート番号変更のため Virtuoso7 を再起動した直後)
SQL> sparql select count(*) where {?s ?p ?o.};
3099420204
1 Rows. -- 229150 msec. → 3.8分 (シャットダウン時にcheckpointを書きだしたから?か速くなった)

% du -sh virtuoso7/database/
155G    virtuoso7/database/

数日かかっていたデータのロードが数時間で終わるようになったのは日常的に運用することを考えると画期的。

ld_dir_all/ld_dir, rdf_loader_run で大量ファイルをインポート中に残りのファイル数を数えるには、Virtuoso ウェブ版の conductor もしくは別プロセスの isql から

SQL> select count(*) from DB.DBA.LOAD_LIST where ll_state = 0;

を実行する。

エンドポイント

http://ep.dbcls.jp/sparql 

データセットとグラフ名

元データ グラフ名
/data/store/rdf/togogenome/refseq/prokaryotes.ttl/**/*.ttl http://togogenome.org/refseq/
/data/store/rdf/uniprot/current/uniprot_unzip/*.owl http://togogenome.org/uniprot/
/data/store/rdf/uniprot/current/uniprot_unzip/*.rdf http://togogenome.org/uniprot/
/data/store/rdf/togogenome/uniprot/current/prokaryotes/**/*.ttl http://togogenome.org/uniprot/
/data/store/rdf/togogenome/ontology/go/go.owl http://togogenome.org/go/
/data/store/rdf/togogenome/ontology/so/so.owl http://togogenome.org/so/
/data/store/rdf/togogenome/ontology/ncbitaxon/ncbitaxon.owl http://togogenome.org/ncbitaxon/
/data/store/rdf/togogenome/ontology/MCCV/mccv.ttl http://togogenome.org/mccv/
/data/store/rdf/togogenome/ontology/MEO/meo.owl http://togogenome.org/meo/
/data/store/rdf/togogenome/ontology/MEO/gold2ontology2.ttl http://togogenome.org/meo/
/data/store/rdf/togogenome/ontology/MPO/mpo.owl http://togogenome.org/mpo/
/data/store/rdf/togogenome/ontology/MPO/gold_all_mpo.ttl http://togogenome.org/mpo/
/data/store/rdf/togogenome/ontology/GOLD/gold2taxon.ttl http://togogenome.org/gold/
http://biohackathon.org/resources/faldo http://togogenome.org/faldo/

Turtle に変換した、

それぞれ Taxonomy ID ごとに分割されたファイルとしてダウンロードすることも可能。

RefSeq から Turtle への変換は現状 refseq2ttl.rb, rs_id.json, ft_so.json を利用。

今後の課題は

  • INSDC オントロジーの完成と refseq2ttl.rb コンバータへの取り込み
  • Feature table の source_* と feature_* の predicate 名を変更
  • INSDC エントリの Feature table 以外の部分のメタデータも RDF 化
  • Identifiers.org の URI のクラス定義を再検討
  • TogoWS の convert 機能にもコンバータの更新を適用
  • DDBJ の内部パイプラインへの採用

など。