0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

RDF.rb 3.2における RDF::Graph#insert_statement が遅い問題

Last updated at Posted at 2022-08-18

RDF.rb は、Rubyで書かれたRDF解析ライブラリで、Ruby界隈でのセマンティックWebやLinked Data処理用途で広く使われている。

RDF.rbの2022年8月時点での最新版は 3.2.9 だが、このバージョンには、昨年2021年時点で使っていた3.1系列に比べて、かなり性能上の劣化があるようなので、念のためメモを残しておく。

例えば、以下のようなコードを実行した場合、数万トリプル規模のファイルの場合には数秒で終わるのが、数十万トリプルを超えた場合に、急速に遅くなる現象が発生する。

require "rdf/n3"
graph = RDF::Graph.new
RDF::N3::Reader.open("test.n3") do |reader|
  count = 0
  reader.each_statement do |statement|
    graph.insert << statement
    count += 1
  end
end

上記のコードは単に、test.n3というRDF/N3形式のファイルを読み込みながら、graph変数にトリプルを格納しなおしているだけのコードである。

ベンチマークのために、SP2Benchと呼ばれるRDFベンチマーク用のツールを使って自動生成した、1万トリプル、10万トリプル、20万トリプル、100万トリプルの各RDFデータファイルに対して実行した場合の性能比較を行ってみた結果が以下となる。

$ ./benchmark.rb "~> 3.1.0"
RDF::VERSION: 3.1.15
RDF::N3::VERSION: 3.1.2
                      user     system      total        real
test10k.n3        3.049624   0.069207   3.118831 (  3.119040)
test100k.n3      33.302798   0.159743  33.462541 ( 33.463206)
test200k.n3      84.753375   0.290011  85.043386 ( 85.045089)
test1000k.n3    805.143489   2.719901 807.863390 (807.891563)
$ ./benchmark.rb "~> 3.2.0"
RDF::VERSION: 3.2.9
RDF::N3::VERSION: 3.2.1
                      user     system      total        real
test10k.n3        3.084775   0.021109   3.105884 (  3.106361)
test100k.n3      40.841392   0.279945  41.121337 ( 41.124899)
test200k.n3     183.223961   0.829992 184.053953 (184.062652)
test1000k.n3  11218.755949  15.469557 11234.225506 (11234.622095)

まず、RDF.rb 3.1.15 での結果をみると、1万トリプルで3秒が、100万トリプルが800秒となる等、やや時間がかかっているとはいえ、おおむね線形の実行時間となっている。
一方、RDF.rb 3.2.9 では、1万トリプルでは3.1系と変わらないものの、10万トリプル・20万トリプルと少しずつ実行が3.1系より遅くなっている。さらに、100万トリプルのデータでは、3時間以上と相当に実行時間を要する結果となっている。

なお、上記の実行環境は Windows11 の WSL2 (Ubuntu) において構築した Ruby 3.1.2p20 を使って確認した。

実行に使ったスクリプトは以下にあるものです: https://gist.github.com/masao/398d9009cd8ba78d9da9283c8038c27d

また、使ったデータは以下にも置いておきます: https://www.dropbox.com/sh/kwndqqddj1jfz8l/AABcE0ssvYkl0EO5Vm5gtw-_a?dl=0

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?