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]ボタンを押す
クエリ実行
- "http://localhost:8890/sparql"にアクセスしてSPARQLを試す(ポートは--publishで指定したもの)
重い(ファイル数が多い)データを扱う場合
ロード数が多い場合やデータが重い場合(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
クエリ実行
- "http://localhost:8890/sparql"にアクセスしてSPARQLを試す(ポートは--publishで指定したもの)