HDT

提供:TogoWiki

移動: 案内, 検索

目次

C++ ツール群インストール

  • HDT C++ Library and Toolsからソースをダウンロード
  • 前提 RDF ツール/ライブラリ群(なくても使えるが性能が落ちる)
    • Raptor: RDF parser library
    • Serd: Turtle & NTriple の高速reader/writer
  • 普通入ってると思いますが,なければ入れる:
    • zlib
  • ツールコンパイル
 cd hdt-lib
 make

hdt-lib/tools にツール群が生成される

Allie のデータを用いてツール群調査 (at SPARQLthon39 by atsuko)

入っているのは下記5つのツール:

  • rdf2hdt
  • hdt2rdf
  • hdtInfo
  • replaceHeader
  • hdtSearch

テスト用データ

  • allie_clusters.nt (14111209トリプル)

利用マシン

  • Mac OS Yosemite
  • CPU 1.7 GHz
  • Mem 8GB

それぞれのツールについて調査 (Java パッケージと性能比較)

rdf2hdt

概要: nt, ttl, rdf/xml -> hdt のツール.オプション -f で入力フォーマットを指定し,オプション -i でサーチ用インデックスファイル(*.hdt.index)をHDTファイル(*.hdt)と同時に作成する.

  • コマンド

% rdf2hdt (オプション) 入力RDFファイル名 出力HDTファイル名

  • 性能評価

C++版: 使用メモリは最大約1GB, 計算時間 約 2分半

$ time tools/rdf2hdt data/allie_clusters.nt data/allie_clusters.hdt
HDT Successfully generated.                                                        
Total processing time: Clock(2 min 37 sec 864 ms 550 us)  User(2 min 31 sec 510 ms 721 us)  System(3 sec 985 ms 63 us)

real	2m37.927s
user	2m31.516s
sys	0m4.037s

Java版: オプション -Xmx1g -XX:-XX:-UseGCOverheadLimit -> 6200000 トリプル読み込んで20分進まなかったので強制終了

Java版: オプション -Xmx2g -XX:-XX:-UseGCOverheadLimit -> 14100000 トリプル読み込んで20分進まなかったので強制終了

Java版: オプション -Xmx3g -XX:-XX:-UseGCOverheadLimit, 計算時間 約3分半

$time bin/rdf2hdt.sh data/allie_clusters.nt data/allie_clusters.hdt
Converting data/allie_clusters.nt to data/allie_clusters.hdt as null
File converted in: 3 min 34 sec 126 ms 233 us                        
Total Triples: 14111209
Different subjects: 3727639
Different predicates: 25
Different objects: 7156435
Common Subject/Object:1863841
HDT saved to file in: 578 ms 165 us

real	3m35.201s
user	9m13.621s
sys	0m5.926s

hdtSearch

概要: hdtファイルにトリプルパターンで検索をかけるツール.

  • コマンド

% hdtSeach HDTファイル名

HDTファイルと同じディレクトリにインデックスファイル(*.hdt.index)がない場合,初回に自動的に作成する.

C++版(7秒)

% /tools/hdtSearch data/allie_clusters.hdt
Predicate Bitmap in 319 ms 810 us 14.86 %                                      
Count predicates in 1 sec 525 ms 491 us2 % / 34.235 %                       
Count Objects in 499 ms 940 us Max was: 1863802.551 %                      
Bitmap in 99 ms 992 us: 97.814 % / 48.413 %                      
Bitmap bits: 14111209 Ones: 7156435
Object references in 2 sec 860 ms 420 us/ 68.164 %                      
Sort lists in 2 sec 271 ms 688 us% / 90.998 %                        
Index generated in 7 sec 577 ms 539 us
>>

Java版(14秒)

$ bin/hdtSearch.sh data/allie_clusters.hdt 
Could not read .hdt.index, Generating a new one.
Predicate Bitmap in 348 ms 370 us
Count predicates in 11 sec 124 ms 743 us
Count Objects in 478 ms 500 us Max was: 1863802
Bitmap in 80 ms 378 us
Object references in 12 sec 721 ms 437 us
Sort object sublists in 1 sec 406 ms 434 us
Count predicates in 304 ms 796 us
Index generated in 14 sec 992 ms 2 us
  • 性能評価

C++版

>> ? ? http://purl.org/allie/id/pair/1781818                   
_:_:ClusterMembers100003 http://purl.org/allie/ontology/201108#hasMemberOf http://purl.org/allie/id/pair/1781818
1 results in 969 us
>> ? ? http://purl.org/allie/id/pair/2395948
_:_:ClusterMembers1000088 http://purl.org/allie/ontology/201108#hasMemberOf http://purl.org/allie/id/pair/2395948
1 results in 1 ms 467 us

Java版

>> ? ? http://purl.org/allie/id/pair/1781818
Query: |?| |?| |http://purl.org/allie/id/pair/1781818|
_:_:ClusterMembers100003 http://purl.org/allie/ontology/201108#hasMemberOf http://purl.org/allie/id/pair/1781818
Iterated 1 triples in 9 ms 926 us
>> ? ? http://purl.org/allie/id/pair/2395948
Query: |?| |?| |http://purl.org/allie/id/pair/2395948|
_:_:ClusterMembers1000088 http://purl.org/allie/ontology/201108#hasMemberOf http://purl.org/allie/id/pair/2395948
Iterated 1 triples in 575 us
/mw/HDT」より作成