Hatena::Grouplifesciencedb

ゲノム周辺 このページをアンテナに追加 RSSフィード

2010-01-06

インストールした 4store の動作確認をした。

| 00:30 |  インストールした 4store の動作確認をした。 - ゲノム周辺 を含むブックマーク はてなブックマーク -  インストールした 4store の動作確認をした。 - ゲノム周辺  インストールした 4store の動作確認をした。 - ゲノム周辺 のブックマークコメント

SPARQLのつかえるスケーラブルRDFストア 4store をSnow LeopardのMacにインストールしてみた。 - ゲノム周辺 - lifesciencedbグループインストールした 4store の動作確認をなぞった。

はじめに http://4store.org/trac/wiki/GettingStarted でざっと全体の動作をみておく。4s-backend-setup、4s-backend、4s-httpd などコマンド名にオプション込なかんじ。http://4store.org/trac/wiki/Documentation の Usage の各項目をなぞる。

/Application/4store.app を起動すると、適切に環境設定された Terminal.app のウィンドウが一つでてくる。4store コマンド群は /Applications/4store.app/Contents/MacOS/bin/4s-backend にある。

コマンド群は 4s-からはじまっている

$ ls /Applications/4store.app/Contents/MacOS/bin/
4s-backend*          4s-cluster-create*               4s-httpd*
4s-backend-copy*     4s-cluster-destroy*              4s-import*
4s-backend-destroy*  4s-cluster-file-backup*          4s-info*
4s-backend-info*     4s-cluster-info*                 4s-query*
4s-backend-passwd*   4s-cluster-replication-disable*  4s-resolve*
4s-backend-setup*    4s-cluster-start*                4s-restore*
4s-bind*             4s-cluster-stop*                 4s-reverse-bind*
4s-cluster-cache*    4s-delete-model*                 4s-size*
4s-cluster-copy*     4s-dump*                         4s-update*

データベースのセットアップは 4s-backend-setup

データベース名(Knowledge Base名; KB名)demo として作成。

$ 4s-backend-setup demo
4store[39388]: backend-setup.c:176 erased files for KB demo
4store[39388]: backend-setup.c:301 created RDF metadata for KB demo

データベースの実体は /var/lib/4store/demo に作成される。

$ ls /var/lib/4store/demo
0000/  0001/  metadata.nt

クラスタの設定はこんなかんじ。

$ 4s-backend-setup --node 0 --cluster 1 --segments 4 demo
4store[39394]: backend-setup.c:176 erased files for KB demo
4store[39394]: backend-setup.c:301 created RDF metadata for KB demo

node 引数cluster 引数、segments 引数は後ほどしらべる。


起動は 4s-backend

4s-backend demo

デーモンとして起動する。


データインポートは 4s-import

ソース配布物のdataの中から一つインポートしてみる。

$ 4s-import -v demo data/tiger/tiger_features.rdf
removing old data
Reading <file:///Users/nakao/Applications/4store/4store/data/tiger/tiger_features.rdf>;
Pass 1, processed 748 triples (748)
Pass 2, processed 748 triples, 90250 triples/s
Updating index
Index update took 1.469478 seconds
Imported 748 triples, average 505 triples/s

コマンドラインクエリインターフェイスは 4s-query

対話的に起動。

$ 4s-query demo4store> SELECT * WHERE {?s ?p ?o}
#EOQ
?s     ?p     ?o
<http://www.census.gov/tiger/2002/CFCC/D85>;     <http://www.w3.org/2000/01/rdf-schema#subClassOf>;     <http://www.census.gov/tiger/2002/CFCC/D8>;
<http://www.census.gov/tiger/2002/CFCC/F40>;     <http://www.w3.org/2000/01/rdf-schema#subClassOf>;     <http://www.census.gov/tiger/2002/CFCC/F4>;
<http://www.census.gov/tiger/2002/CFCC/E0>;     <http://www.w3.org/2000/01/rdf-schema#subClassOf>;     <http://www.census.gov/tiger/2002/CFCC/E>;

実行区切り文字列は #EOQ\n

SPARQLクエリコマンドラインでも実行可。

$ 4s-query demo 'SELECT * WHERE { ?s ?p ?o } LIMIT 1'
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">;
  <head>
    <variable name="s"/>
    <variable name="p"/>
    <variable name="o"/>
  </head>
  <results>
    <result>
      <binding name="s"><uri>http://www.census.gov/tiger/2002/CFCC/D85</uri></binding>;
      <binding name="p"><uri>http://www.w3.org/2000/01/rdf-schema#subClassOf</uri></binding>;
      <binding name="o"><uri>http://www.census.gov/tiger/2002/CFCC/D8</uri></binding>;
    </result>
  </results>
</sparql>

選べる出力形式。

JSON形式

$ 4s-query -f json demo 'SELECT * WHERE { ?s ?p ?o } LIMIT 1'
{"head":{"vars":["s","p","o"]},
 "results": {
  "bindings":[
   {"s":{"type":"uri","value":"http://www.census.gov/tiger/2002/CFCC/D85";},
    "p":{"type":"uri","value":"http://www.w3.org/2000/01/rdf-schema#subClassOf";},
    "o":{"type":"uri","value":"http://www.census.gov/tiger/2002/CFCC/D8";}}
  ]
 }}

SPARQL-RESULTS 形式

$ 4s-query -f sparql demo 'SELECT * WHERE { ?s ?p ?o } LIMIT 1'
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">;
  <head>
    <variable name="s"/>
    <variable name="p"/>
    <variable name="o"/>
  </head>
  <results>
    <result>
      <binding name="s"><uri>http://www.census.gov/tiger/2002/CFCC/D85</uri></binding>;
      <binding name="p"><uri>http://www.w3.org/2000/01/rdf-schema#subClassOf</uri></binding>;
      <binding name="o"><uri>http://www.census.gov/tiger/2002/CFCC/D8</uri></binding>;
    </result>
  </results>
</sparql>

テキスト形式。

$ 4s-query -f text demo 'SELECT * WHERE { ?s ?p ?o } LIMIT 1'
?s     ?p     ?o
<http://www.census.gov/tiger/2002/CFCC/D85>;     <http://www.w3.org/2000/01/rdf-schema#subClassOf>;     <http://www.census.gov/tiger/2002/CFCC/D8>;

テストケース(Turtle)形式。

$ 4s-query -f testcase demo 'SELECT * WHERE { ?s ?p ?o } LIMIT 1'
@prefix rs: <http://www.w3.org/2001/sw/DataAccess/tests/result-set#>; .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>; .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>; .

[] rdf:type rs:ResultSet ;
   rs:resultVariable "s", "p", "o" ;
   rs:solution [
      rs:binding [ rs:variable "s" ;
                   rs:value <http://www.census.gov/tiger/2002/CFCC/D85> ] ;
      rs:binding [ rs:variable "p" ;
                   rs:value <http://www.w3.org/2000/01/rdf-schema#subClassOf> ] ;
      rs:binding [ rs:variable "o" ;
                   rs:value <http://www.census.gov/tiger/2002/CFCC/D8> ]
   ] .

SPARQL HTTPインターフェイスは 4s-httpd

8000ポートで起動

$ 4s-httpd -p 8000 demo

SPARQLエンドポイントは http://localhost:8000/sparql/ になる。

http://localhost:8000 にウェブブラウザアクセス

http://img.skitch.com/20100106-ey6gcjsu42qsege2gimq316ia6.jpg

ステータスページ。

http://img.skitch.com/20100106-nsq5ir2j1c6ynbkmif43t5a9p8.jpg

バックエンドサイズ情報。

http://img.skitch.com/20100106-cb9dq16jare8b33q82exaq12c.jpg

テストクエリ

http://img.skitch.com/20100106-x8hfwfdjt3xkexyn9nwcg346nh.jpg

クエリ結果

http://img.skitch.com/20100106-8g2w2r4tsycy8sdwrnxa6966hp.jpg


RESTful インターフェイス

PUT

$ curl -T file.rdf http://localhost:8000/sparql/file.rdf

DELETE

$ curl -X DELETE http://localhost:8000/sparql/file.rdf

注意する点として、グラフ単位(ファイル単位)でしか追加/削除できない。http://4store.org/trac/wiki/TODO

クライアントからの接続

php、phtyon、rubyJavaクライアントがある。Perlさん。。。

ruby クライアントの場合。インストールしてみる。

$ gem build 4store-ruby.gemspec
WARNING:  no rubyforge_project specified
  Successfully built RubyGem
  Name: 4store-ruby
  Version: 0.0.3
  File: 4store-ruby-0.0.3.gem
$ sudo gem install 4store-ruby-0.0.3.gem

使ってみる。

>> require 'rubygems'
=> true
>> gem '4store-ruby'   
=> true
>> FourStore
=> FourStore
>> FourStore::Store
=> FourStore::Store
>> FourStore::Store.new("http://localhost:8000/sparql/";)
=> #<FourStore::Store:0x10176a000 @endpoint=#<URI::HTTP:0x101769c90 URL:http://localhost:8000/sparql/>>;
>> ep = FourStore::Store.new("http://localhost:8000/sparql/";)
=> #<FourStore::Store:0x101763890 @endpoint=#<URI::HTTP:0x101763548 URL:http://localhost:8000/sparql/>>;
>> res = ep.select("SELECT * WHERE { ?s ?p ?o } LIMIT 10");
?> "
"
=> "\n"
>> require 'pp'
=> true
>> pp res
[{"o"=>"http://www.census.gov/tiger/2002/CFCC/D8";,
  "p"=>"http://www.w3.org/2000/01/rdf-schema#subClassOf";,
  "s"=>"http://www.census.gov/tiger/2002/CFCC/D85";},
 {"o"=>"http://www.census.gov/tiger/2002/CFCC/F4";,
  "p"=>"http://www.w3.org/2000/01/rdf-schema#subClassOf";,
  "s"=>"http://www.census.gov/tiger/2002/CFCC/F40";},
 {"o"=>"http://www.census.gov/tiger/2002/CFCC/E";,
  "p"=>"http://www.w3.org/2000/01/rdf-schema#subClassOf";,
  "s"=>"http://www.census.gov/tiger/2002/CFCC/E0";},
 {"o"=>"http://www.census.gov/tiger/2002/CFCC/B";,
  "p"=>"http://www.w3.org/2000/01/rdf-schema#subClassOf";,
  "s"=>"http://www.census.gov/tiger/2002/CFCC/B4";},
 {"o"=>"http://www.census.gov/tiger/2002/CFCC/D2";,
  "p"=>"http://www.w3.org/2000/01/rdf-schema#subClassOf";,
  "s"=>"http://www.census.gov/tiger/2002/CFCC/D27";},
 {"o"=>"http://www.census.gov/tiger/2002/CFCC/A";,
  "p"=>"http://www.w3.org/2000/01/rdf-schema#subClassOf";,
  "s"=>"http://www.census.gov/tiger/2002/CFCC/A5";},
 {"o"=>"http://www.census.gov/tiger/2002/CFCC/A2";,
  "p"=>"http://www.w3.org/2000/01/rdf-schema#subClassOf";,
  "s"=>"http://www.census.gov/tiger/2002/CFCC/A21";},
 {"o"=>"http://www.census.gov/tiger/2002/CFCC/H7";,
  "p"=>"http://www.w3.org/2000/01/rdf-schema#subClassOf";,
  "s"=>"http://www.census.gov/tiger/2002/CFCC/H70";},
 {"o"=>"http://www.census.gov/tiger/2002/CFCC/B5";,
  "p"=>"http://www.w3.org/2000/01/rdf-schema#subClassOf";,
  "s"=>"http://www.census.gov/tiger/2002/CFCC/B52";},
 {"o"=>"http://www.census.gov/tiger/2002/CFCC/D4";,
  "p"=>"http://www.w3.org/2000/01/rdf-schema#subClassOf";,
  "s"=>"http://www.census.gov/tiger/2002/CFCC/D43";}]
=> nil

メソッド一覧。

>> FourStore::Store.instance_methods - Object.methods
=> ["delete", "add", "set", "select", "load"]

ドキュメントが無いので、ソース読め、とのこと。

rubyクライアントはREXMLをつかっているのが気になるところ。大規模用途に備えて nokogiri で高速化出来るかな?


まとめ

  1. Mac OS X 10.6で動作確認した。
  2. セットアップ、バックエンド起動、データインポートクエリインターフェイスhttpインターフェイスクライアントの利用をなぞった。
  3. RDFのストア、クエリが簡単にできた。
  4. HTTP SPARQL endpoint がある。
  5. RESTful APIがある。
  6. phppythonrubyJava クライアントがある。

DavSnusaDavSnusa2017/05/11 18:13Cytotec 200pg Pharmacie En Ligne <a href=http://byuvaigranonile.com>viagra</a> Priligy En Valencia Finasteride 10mg Skin Health Lowest Price Flagyl Low Price

トラックバック - http://lifesciencedb.g.hatena.ne.jp/nakao_mitsuteru/20100106

2010-01-054store

SPARQLのつかえるスケーラブルRDFストア 4store をSnow LeopardのMacにインストールしてみた。

| 02:47 |  SPARQLのつかえるスケーラブルRDFストア 4store をSnow LeopardのMacにインストールしてみた。 - ゲノム周辺 を含むブックマーク はてなブックマーク -  SPARQLのつかえるスケーラブルRDFストア 4store をSnow LeopardのMacにインストールしてみた。 - ゲノム周辺  SPARQLのつかえるスケーラブルRDFストア 4store をSnow LeopardのMacにインストールしてみた。 - ゲノム周辺 のブックマークコメント

4store とは、RDFクエリエンジンとデータベースストレージ。高パフォーマンス、スケール性、安定性が強みとのこと。ライセンスはGPLv3、ANSI C99でコードされているので、多くのUNIXライクプラットフォームで実行可能。Linux用につくられているがMac OS Xでもうごく。クラスタリングによって、インポート速度は秒速120kトリプル を達成し、比較的単純なクエリはミリセカンドで応答する。これはHTTP経由SPARQLプロトコルでも達成できる。セキュリティにも十分配慮がなされている。

スケール性について。たとえば、8GBメモリのマシン9台でクラスタリングすると15ギガトリプルを扱うことができる。ハッシュ値の衝突からの上限はおよそ50-70ギガトリプルと見積もられている。

これを Mac OS X 10.6 の MacPro にインストールしてみたい。

バイナリ配布はエラーになった。

インストールして実行してみる。

nmp:~ nakao$ 4s-backend-setup test
dyld: Library not loaded: /usr/lib/libxml2.2.dylib
  Referenced from: /usr/lib/libxslt.1.dylib
  Reason: Incompatible library version: libxslt.1.dylib requires version 10.0.0 or later, but libxml2.2.dylib provides version 9.0.0
Trace/BPT trap

ライブラリのバージョンがあっていない。配布物は10.4当時を想定しているようだった。

ソースからビルドすることにした。

git からコンパイルする。

git clone git://github.com/garlik/4store.git
cd 4store
./configure

いろいろ依存パッケージやライブラリがはいっていなかった。

依存パッケージなどは次の通り。

  • pkg-config
  • raptor
  • rasqal
  • glib2
    • lib is a library which includes support routines for C, such as lists, trees, hashes, memory allocation, and many other things.
    • http://www.gtk.org/
  • libxml2
    • Libxml is the XML C library developed for the Gnome project. XML itself is a metalanguage to design markup languages. Though the library is written in C, a variety of language bindings make it available in other environments.
    • http://xmlsoft.org/
  • pcre
    • The PCRE library is a set of functions that implement regular expression pattern matching using the same syntax and semantics as Perl 5. PCRE has its own native API, as well as a set of wrapper functions that correspond to the POSIX regular expression API.
    • http://www.pcre.org/
  • ncurses
  • readline
    • The GNU Readline library provides a set of functions for use by applications that allow users to edit command lines as they are typed in. Both Emacs and vi editing modes are available. The Readline library includes additional functions to maintain a list of previously-entered command lines, to recall and perhaps reedit those lines, and perform csh-like history expansion on previous commands.
    • http://cnswww.cns.cwru.edu/~chet/readline/rltop.html
  • zlib
    • zlib is designed to be a free, general-purpose, legally unencumbered, lossless data-compression library for use on virtually any computer hardware and operating system.
    • http://www.zlib.net/
  • avahi
    • Avahi is a system which facilitates service discovery on a local network. This means that you can plug your laptop or computer into a network and instantly be able to view other people who you can chat with, find printers to print to or find files being shared. This kind of technology is already found in Mac OS X (branded Rendezvous, Bonjour and sometimes Zeroconf) and is very convenient. Avahi is mainly based on Lennart Poettering's flexmdns mDNS implementation for Linux which has been discontinued in favour of Avahi. (ランデブーのフリー版のようなもの)
    • http://avahi.org/
  • mDNS

Avahi と mDNS はどちらかがあればよい。

依存パッケージをMacPortsインストールする。

raptor をインストールする。

mnmp:4store nakao$ sudo port install raptor
--->  Computing dependencies for curl
--->  Fetching curl
--->  Attempting to fetch curl-7.19.7.tar.bz2 from http://www.execve.net/curl/
--->  Verifying checksum(s) for curl
--->  Extracting curl
--->  Configuring curl
--->  Building curl
--->  Staging curl into destroot
--->  Deactivating curl @7.19.4_0
--->  Computing dependencies for curl
--->  Installing curl @7.19.7_0
--->  Activating curl @7.19.7_0
--->  Cleaning curl
--->  Computing dependencies for libxslt
--->  Fetching libxslt
--->  Attempting to fetch libxslt-1.1.26.tar.gz from http://distfiles.macports.org/libxslt
--->  Verifying checksum(s) for libxslt
--->  Extracting libxslt
--->  Configuring libxslt
--->  Building libxslt
--->  Staging libxslt into destroot
--->  Deactivating libxslt @1.1.24_2
--->  Computing dependencies for libxslt
--->  Installing libxslt @1.1.26_0
--->  Activating libxslt @1.1.26_0
--->  Cleaning libxslt
--->  Computing dependencies for raptor
--->  Fetching raptor
--->  Attempting to fetch raptor-1.4.19.tar.gz from http://download.librdf.org/source/
--->  Verifying checksum(s) for raptor
--->  Extracting raptor
--->  Configuring raptor
--->  Building raptor
--->  Staging raptor into destroot
--->  Installing raptor @1.4.19_0
--->  Activating raptor @1.4.19_0
--->  Cleaning raptor
mnmp:4store nakao$ ./configure
[OK  ] pkg-config installed
[OK  ] raptor installed
[FAIL] no rasqal library

rasqal をインストールする。

mnmp:4store nakao$ sudo port install rasqal
--->  Computing dependencies for rasqal
--->  Fetching rasqal
--->  Attempting to fetch rasqal-0.9.16.tar.gz from http://download.librdf.org/source/
--->  Verifying checksum(s) for rasqal
--->  Extracting rasqal
--->  Configuring rasqal
--->  Building rasqal
--->  Staging rasqal into destroot
--->  Installing rasqal @0.9.16_0
--->  Activating rasqal @0.9.16_0
--->  Cleaning rasqal
mnmp:4store nakao$ ./configure
[OK  ] pkg-config installed
[OK  ] raptor installed
[OK  ] rasqal installed
[FAIL] no glib2 devel system

glib2をインストールする。

この間、とても書き切れないくらい操作して +universal でなみなみ更新

python25 をインストールする。

mnmp:4store nakao$ sudo port install python25
--->  Computing dependencies for python25
--->  Fetching python25
--->  Verifying checksum(s) for python25
--->  Extracting python25
--->  Applying patches to python25
--->  Configuring python25
--->  Building python25
--->  Staging python25 into destroot
--->  Installing python25 @2.5.4_9+darwin+darwin_10+macosx
--->  Activating python25 @2.5.4_9+darwin+darwin_10+macosx

To fully complete your installation and make python 2.5 the default, please run

     sudo port install python_select 
     sudo python_select python25

--->  Cleaning python25

4store のビルドインストール

./configure
make
make test

make test でテスト成功にみえるが、エラーとして終了する。

sudo make install

動作確認

http://4store.org/trac/wiki/CreateDatabase を参照。

mnmp:benchmark nakao$ 4s-backend-setup demo
4store[39388]: backend-setup.c:176 erased files for KB demo
4store[39388]: backend-setup.c:301 created RDF metadata for KB demo

どうやら動くらしい。


パッケージ化した

make macdmg で 4store.app とその dmg パッケージを作成できる。

アプリビルドしている app-aux/build-app.sh では /sw (Fink)を前提としているので、それを /opt/local (MacPorts)におきかえる。こうして作成したパッケージが別のMacでの動作を確認。

app-aux/build-app.sh の変更分は git でフォークした:http://github.com/nakao/4store


まとめ

  1. バイナリ配布物がSnow Leopardではうごかなかった。
  2. Snow Leopard, MacPorts 環境でビルドできた。
  3. パッケージを作成した。
  4. githubMacPortsでパッケージ化するソースをフォークした。
トラックバック - http://lifesciencedb.g.hatena.ne.jp/nakao_mitsuteru/20100105