BH12.12/SPARQLthon/MBGD
提供:TogoWiki
目次 |
実行環境
- DDBJのスパコンから、MBGDのエンドポイントに、REST APIでアクセスした。
- 自作のSPARQLクライアント sparqling を利用した。
- 計測:ランダムに一つの遺伝子(あるいはクラスター)を選んで実行することを10回繰り返し、実行時間の平均と標準偏差を求めた。
- いつも同じクエリーにすると、キャッシュの影響で正しい計測ができないため、ランダムに選んだ。
- クエリーによって時間が大幅に違うため、10回試行して平均と標準偏差を求めた。
- OWLIM/SesameとVirtuosoの比較においては、クエリーをそろえたうえで比較するようにした。
- 注:OWLIM/Sesame と Virtuosoは、完全に同じ条件で動かしているわけではないので、下記の比較もどうか参考までということにして下さい
様々なSPARQLクエリー
1. オーソログの取得
PREFIX mbgd: <http://mbgd.genome.ad.jp:8036/rdf/rdf-schema#> construct { $cluster $p $o. } where { $cluster $p $o. $cluster mbgd:member $domain. $domain mbgd:domainOf <http://mbgd.genome.ad.jp:8036/rdf/gene/ath:AT1G20320>. }
- OWLIM/Sesame: 0.34 sec (SD=0.04)
- Virtuoso: 0.40 sec (SD=0.11)
- Virtuoso(SSD): 0.22 sec (SD=0.07)
1a. select版
PREFIX mbgd: <http://mbgd.genome.ad.jp:8036/rdf/rdf-schema#> select $gene2 where { $domain mbgd:domainOf <http://mbgd.genome.ad.jp:8036/rdf/gene/ath:AT1G20320>. $cluster mbgd:member $domain. $cluster mbgd:member $domain2. $domain2 mbgd:domainOf $gene2. }
- OWLIM/Sesame: 1.12 sec (SD=1.70)
- Virtuoso: 1.60 sec (SD=1.01)
- Virtuoso(SSD): 1.43 sec (SD=1.03)
1b. select版, 生物種情報も付加
PREFIX mbgd: <http://mbgd.genome.ad.jp:8036/rdf/rdf-schema#> select $gene2 $orgName2 where { $domain mbgd:domainOf <http://mbgd.genome.ad.jp:8036/rdf/gene/ath:AT1G20320>. $cluster mbgd:member $domain. $cluster mbgd:member $domain2. $domain2 mbgd:domainOf $gene2. $gene2 mbgd:geneOf $genome2. $genome2 mbgd:orgName $orgName2. }
- OWLIM/Sesame: 148.5 sec (SD=48.5)
- Virtuoso: 0.41 sec (SD=0.19)
- Virtuoso(SSD): 0.49 sec (SD=0.38)
1c. select版, クラスターIDから取得
PREFIX mbgd:<http://mbgd.genome.ad.jp:8036/rdf/rdf-schema#> select $cluster $descr $gene where { $cluster mbgd:clusterId "1000". $cluster mbgd:descr $descr. $cluster mbgd:member $domain. $domain mbgd:domainOf $gene; }
- OWLIM/Sesame: 0.28 sec (SD=0.12)
- Virtuoso: 0.26 sec (SD=0.08)
- Virtuoso(SSD): 0.15 sec (SD=0.02)
2. オーソログの取得(詳細な情報)
PREFIX mbgd: <http://mbgd.genome.ad.jp:8036/rdf/rdf-schema#> construct { $gene2 $p2 $o2. } where { $domain mbgd:domainOf <http://mbgd.genome.ad.jp:8036/rdf/gene/ath:AT1G20320>. $cluster mbgd:member $domain. $cluster mbgd:member $domain2. $domain2 mbgd:domainOf $gene2. $gene2 $p2 $o2. }
- OWLIM/Sesame: 9.9 sec (SD=9.9)
- Virtuoso: 4.3 sec (SD=9.1)
- Virtuoso(SSD): 3.1 sec (SD=3.2)
2a. 生物種情報を付加
PREFIX mbgd: <http://mbgd.genome.ad.jp:8036/rdf/rdf-schema#> construct { $gene2 $p2 $o2. $gene2 mbgd:orgName $orgName2. } where { $domain mbgd:domainOf <http://mbgd.genome.ad.jp:8036/rdf/gene/ath:AT1G20320>. $cluster mbgd:member $domain. $cluster mbgd:member $domain2. $domain2 mbgd:domainOf $gene2. $gene2 $p2 $o2. $gene2 mbgd:geneOf $genome2. $genome2 mbgd:orgName $orgName2. }
- OWLIM/Sesame: 207.9 sec (SD=79.5)
- Virtuoso: 3.4 sec (SD=5.4)
- Virtuoso(SSD): 2.5 sec (SD=3.8)
2b. select版
PREFIX mbgd: <http://mbgd.genome.ad.jp:8036/rdf/rdf-schema#> select $cluster $descr $gene2 $geneDescr2 where { $domain mbgd:domainOf <http://mbgd.genome.ad.jp:8036/rdf/gene/ath:AT1G20320>. $cluster mbgd:member $domain. $cluster mbgd:descr $descr. $cluster mbgd:member $domain2. $domain2 mbgd:domainOf $gene2. $gene2 mbgd:geneDescr $geneDescr2. }
- OWLIM/Sesame: 1.71 sec (SD=2.35)
- Virtuoso: 0.65 sec (SD=0.73)
- Virtuoso(SSD): 0.37 sec (SD=0.39)
2c. select版, 生物種情報も付加
PREFIX mbgd: <http://mbgd.genome.ad.jp:8036/rdf/rdf-schema#> select $cluster $descr $gene2 $geneDescr2 $orgName2 where { $domain mbgd:domainOf <http://mbgd.genome.ad.jp:8036/rdf/gene/ath:AT1G20320>. $cluster mbgd:member $domain. $cluster mbgd:descr $descr. $cluster mbgd:member $domain2. $domain2 mbgd:domainOf $gene2. $gene2 mbgd:geneDescr $geneDescr2. $gene2 mbgd:geneOf $genome2. $genome2 mbgd:orgName $orgName2. }
- OWLIM/Sesame: 227.7 sec (SD=81.8)
- Virtuoso: 0.51 sec (SD=0.21)
- Virtuoso(SSD): 0.50 sec (SD=0.30)
2d. select版, クラスターIDから取得
PREFIX mbgd:<http://mbgd.genome.ad.jp:8036/rdf/rdf-schema#> select $cluster $descr $gene $geneDescr $genome where { $cluster mbgd:clusterId "1000". $cluster mbgd:descr $descr. $cluster mbgd:member $domain. $domain mbgd:domainOf $gene. $gene mbgd:geneDescr $geneDescr. $gene mbgd:geneOf $genome. }
- OWLIM/Sesame: 0.35 sec (SD=0.23)
- Virtuoso: 0.33 sec (SD=0.19)
- Virtuoso(SSD): 0.59 sec (SD=1.17)
3. オントロジーを利用したクエリー
define input:inference "http://localhost:8890/DAV/owl/rule_set" PREFIX mbgd:<http://mbgd.genome.ad.jp:8036/rdf/rdf-schema#> select $cluster $p $x where { $cluster mbgd:clusterId "1000". $cluster mbgd:func $x. $cluster $p $x. }
オントロジーで、新たに述語 mbgd:func を定義して、mbgd:funcTigr, mbgd:funcKegg, mbgd:funcMbgd, mbgd:funcCog のスーパープロパティとしてある。
- Virtuoso 0.27 sec (SD=0.11)
- Virtuoso(SSD) 0.35 sec (SD=0.52)
3a. 同等のクエリー
PREFIX mbgd:<http://mbgd.genome.ad.jp:8036/rdf/rdf-schema#> select $cluster $p $x where { $cluster mbgd:clusterId "$ARG0". $cluster (mbgd:funcTigr|mbgd:funcKegg|mbgd:funcMbgd|mbgd:funcCog) $x. $cluster $p $x. }
この書き方はVirtuosoでは実装されていない
- OWLIM/Sesame 0.33 sec (SD=0.34)
3b. 同等のクエリー
PREFIX mbgd:<http://mbgd.genome.ad.jp:8036/rdf/rdf-schema#> select $cluster $p $x where { $cluster mbgd:clusterId "$ARG0". { $cluster mbgd:funcTigr $x. } union { $cluster mbgd:funcKegg $x. } union { $cluster mbgd:funcMbgd $x. } union { $cluster mbgd:funcCog $x. } $cluster $p $x. }
- OWLIM/Sesame 0.32 sec (SD=0.30)
- Virtuoso 0.31 sec (SD=0.30)
- Virtuoso(SSD) 0.63 sec (SD=1.39)
4. Federated query
PREFIX mbgd: <http://mbgd.genome.ad.jp:8036/rdf/rdf-schema#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> construct { <http://mbgd.genome.ad.jp:8036/rdf/gene/aav:AAVE_2978> $p $o. <http://mbgd.genome.ad.jp:8036/rdf/gene/aav:AAVE_2978> rdfs:seeAlso $ref. } where { <http://mbgd.genome.ad.jp:8036/rdf/gene/aav:AAVE_2978> $p $o. <http://mbgd.genome.ad.jp:8036/rdf/gene/aav:AAVE_2978> mbgd:uniprotId $uniprot. service <http://beta.sparql.uniprot.org/sparql> { $uniprot rdfs:seeAlso $ref. } }
- OWLIM/Sesame 97.2 sec (SD=60.2)
- Virtuoso 0.75 sec (SD=0.31)
4a. 単純化
PREFIX mbgd: <http://mbgd.genome.ad.jp:8036/rdf/rdf-schema#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> construct { <http://mbgd.genome.ad.jp:8036/rdf/gene/aav:AAVE_2978> rdfs:seeAlso $ref. } where { <http://mbgd.genome.ad.jp:8036/rdf/gene/aav:AAVE_2978> mbgd:uniprotId $uniprot. service <http://beta.sparql.uniprot.org/sparql> { $uniprot rdfs:seeAlso $ref. } }
- OWLIM/Sesame 0.55 sec (SD=0.30)
- Virtuoso 0.47 sec (SD=0.27)
4b. 単純化
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> select * where { service <http://beta.sparql.uniprot.org/sparql> { <http://purl.uniprot.org/uniprot/$ARG0> rdfs:seeAlso $ref. } }
- OWLIM/Sesame 0.84 sec (SD=0.30)
- Virtuoso 1.02 sec (SD=0.98)
4c. 同等のクエリー
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> select * where { service <http://beta.sparql.uniprot.org/sparql> { select * where { <http://purl.uniprot.org/uniprot/$ARG0> rdfs:seeAlso $ref. } } }
- OWLIM/Sesame 1.03 sec (SD=0.90)
- Virtuoso 0.70 sec (SD=0.01)
4d. UniProtに直接アクセス
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> construct { <http://purl.uniprot.org/Q00IB6> rdfs:seeAlso $x. } where { <http://purl.uniprot.org/Q00IB6> <http://www.w3.org/2000/01/rdf-schema#seeAlso> $x. } order by $x
5. 生物種の絞り込み
PREFIX mbgd: <http://mbgd.genome.ad.jp:8036/rdf/rdf-schema#> construct { $gene2 mbgd:memberOf $cluster. $gene2 $p $o. } where { $domain mbgd:domainOf <http://mbgd.genome.ad.jp:8036/rdf/gene/ath:AT1G20320>. $cluster mbgd:member $domain. $cluster mbgd:member $domain2. $domain2 mbgd:domainOf $gene2. Filter (regex(str($gene2), "ath:")) $gene2 $p $o. }
- OWLIM/Sesame 0.39 sec (SD=0.13)
- Virtuoso 0.25 sec (SD=0.05)
- Virtuoso(SSD) 1.09 sec (SD=1.38)
PREFIX mbgd: <http://mbgd.genome.ad.jp:8036/rdf/rdf-schema#> select $clusterId $gene2 $uniprot2 where { $domain mbgd:domainOf <http://mbgd.genome.ad.jp:8036/rdf/gene/ath:AT1G20320>. $cluster mbgd:member $domain. $cluster mbgd:clusterId $clusterId. $cluster mbgd:member $domain2. $domain2 mbgd:domainOf $gene2. Filter (regex(str($gene2), "ath:")) $gene2 mbgd:uniprotId $uniprot2. }
PREFIX mbgd: <http://mbgd.genome.ad.jp:8036/rdf/rdf-schema#> select distinct $cluster $gene2 $geneDescr2 where { $cluster mbgd:member $domain. $domain mbgd:domainOf <http://mbgd.genome.ad.jp:8036/rdf/gene/afu:AF1409>. $cluster mbgd:member $domain2. $domain2 mbgd:domainOf $gene2. $gene2 mbgd:geneDescr $geneDescr2. Filter (regex(str($gene2), "toc:")) }
アノテーション文字列による絞り込み
PREFIX mbgd: <http://mbgd.genome.ad.jp:8036/rdf/rdf-schema#> select $cluster $descr where { $cluster mbgd:descr $descr. Filter (regex($descr, "^abc transporter$", "i")) }
PREFIX mbgd: <http://mbgd.genome.ad.jp:8036/rdf/rdf-schema#> construct { $cluster $p $o. } where { $cluster $p $o. $cluster mbgd:descr $descr. Filter (regex($descr, "^ABC transporter$")) }
座標の絞り込み
E.coliのゲノム上の位置<=1000の遺伝子について
PREFIX mbgd: <http://mbgd.genome.ad.jp:8036/rdf/rdf-schema#> construct { $gene mbgd:memberOf $cluster. $gene $p $o. } where { $gene mbgd:geneOf <http://mbgd.genome.ad.jp:8036/rdf/genome/eco>. $domain mbgd:domainOf $gene. $cluster mbgd:member $domain. $gene mbgd:from $from. Filter ($from <= 1000) $gene $p $o. }
Memo
- OWLIM-Liteでも、データベースファイルが60GBになるまでロードできるらしい。