BH12.12/SPARQLthon/MBGD

提供:TogoWiki

移動: 案内, 検索

SPARQLthon

目次

実行環境

  • 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になるまでロードできるらしい。
個人用ツール