SPARQLthon75/virtuoso docker

提供:TogoWiki

移動: 案内, 検索

Virtuosoを最初にインストールする際に依存環境で詰まる場合があるので、Dockerでの動作手順を記載。
以前は公式板がなく"tenforce/virtuoso"がデファクトだったようだが2018年にopenlink社からDockerファイルが配布され始めた。
"openlink/virtuoso_opensource"は非推奨らしく"openlink/virtuoso-opensource-7"を使用する。

目次

軽いデータを扱う場合

数ファイルのRDFデータをロードしてSPARQLを試す程度であればGUIから登録する方法が楽。

インストール

$ cd /your/path/
$ mkdir virtuoso_docker  <= DBデータを置くローカルのディレクトリを作成する
$ cd virtuoso_docker 
$ docker run \
    --name virtuoso_docker_test \
    --env DBA_PASSWORD=dba \
    --publish 1111:1111 \
    --publish  8890:8890 \
    --volume `pwd`:/database \
    openlink/virtuoso-opensource-7:latest
  • --name : 任意のイメージ名
  • --env DBA_PASSWORD : adminユーザのパスワード
  • --publish : ポート転送。複数のイメージを起動するのであれば1112:1111や8892:8890 などと空いているポートを指定する
  • --volume: DBファイルや設定ファイルが置かれる場所へのボリュームの割り当て。`pwd`だとカレントディレクトにVirtuosoのDBファイルが置かれることになる

ロード

  • ブラウザで"http://localhost:8890"にアクセス(ポートは--publishで指定したもの)
  • 左上の"Conductor"を選択し、Account=dba, Password=dba(パスワードは--env DBA_PASSWORD)で指定したものを入力して管理者権限でログイン
  • [Linked Data] - [Quad Store Upload]の順にタブを選択してアップロードするRDFファイルと"Named Graph IRI(任意の値)"を入力して[Upload]ボタンを押す

クエリ実行

重い(ファイル数が多い)データを扱う場合

ロード数が多い場合やデータが重い場合(10M超えていたり)はコマンドラインからロードする方法が楽。
使用メモリ量を増やす設定も必要になる場合がある。

インストール

$ cd /your/path/
$ mkdir virtuoso_docker  <= DBデータを置くローカルのディレクトリを作成する
$ cd virtuoso_docker 
$ docker run \
    --name virtuoso_docker_test \
    --env DBA_PASSWORD=dba \
    --publish 1111:1111 \
    --publish  8890:8890 \
    --volume `pwd`:/database \
    --env VIRT_Parameters_NumberOfBuffers=680000 \
    --env VIRT_Parameters_MaxDirtyBuffers=500000 \
    --env VIRT_Parameters_DirsAllowed="., ../vad, /usr/share/proj, /database" \
    openlink/virtuoso-opensource-7:latest
  • --name : 任意のイメージ名
  • --env DBA_PASSWORD : adminユーザのパスワード
  • --publish : ポート転送。複数のイメージを起動するのであれば1112:1111や8892:8890 などと空いているポートを指定する
  • --volume: DBファイルや設定ファイルが置かれる場所へのボリュームの割り当て。`pwd`だとカレントディレクトにVirtuosoのDBファイルが置かれることになる
  • --env VIRT_XXXXX : この形でvirtuoso.iniの値を変更できる。"VIRT_(virtuoso.iniのセグメント名[Parameters]や[Client])_(設定項目名)"になるらしい。以下3項目を参照
  • --env VIRT_Parameters_NumberOfBuffers : NumberOfBuffersの値を設定。この例ではメモリ8G搭載で推奨される値
  • --env VIRT_Parameters_MaxDirtyBuffers : MaxDirtyBuffersの値を設定。この例ではメモリ8G搭載で推奨される値
  • --env VIRT_Parameters_DirsAllowed : ロードを許可するディレクトリ名を指定。デフォルトに"/database"を追加。ロードファイルを置く任意のディレクトリを追加しても良い(ただしvolumeでマウントが必要)

ロード

ファイルの置き場所

volumeでマウントしている(=Dockerリモートから読める)ディレクトリにロードファイルを置く

上記の設定であれば (ローカル)/your/path/virtuoso_docker/ => (Docker)/database/ にマウントしている
$ mkdir /your/path/virtuoso_docker/data  //dataディレクトリを作成し、そこのロードするRDFファイルを置く

isqlに接続

Dockerのexecコマンドでisqlに接続。ポート番号1111は固定

$ docker exec -i virtuoso_docker_test isql 1111
SQL> 

ロードコマンドを打つ

この場合、ロードファイルはDockerからみたファイルパスで指定する。上記設定であればローカルの"/your/path/virtuoso_docker/data"ディレクトリになる

SQL> log_enable(2,1);
SQL> ld_dir_all('/database/data/', '*.ttl', 'http://example.com/graph');
SQL> rdf_loader_run();
SQL> checkpoint;

ロードファイルを作って一括ロードする

ロードコマンドが長くなる場合には、ロード用SQLファイルを作って、それをisqlに渡してロードする方法もある。ロードファイルは任意の位置に保存してよい

上記設定であれば(ローカル)/your/path/virtuoso_docker/data => (Docker)/database/data にマウントしていることになり、ロードファイルはDockerからみたファイルパスで指定する
$ vi load.sql
log_enable(2,1);
ld_dir_all('/database/data/', '*.ttl', 'http://example.com/graph');
rdf_loader_run();
DB.DBA.TTLP_MT (file_to_string_output('/database/data/hogehoge.ttl'), '', 'http://example.com/graph2');
DB.DBA.RDF_LOAD_RDFXML_MT (file_to_string_output('/database/data/fugafuga.owl'), '', 'http://example.com/graph3');
checkpoint;

$ docker exec -i virtuoso_docker_test isql 1111 < load.sql

クエリ実行