rdf-benchmark 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/AUTHORS +1 -0
- data/README.md +31 -0
- data/UNLICENSE +24 -0
- data/VERSION +1 -0
- data/lib/rdf/benchmark/berlin_generator.rb +57 -0
- data/lib/rdf/benchmark/repository.rb +58 -0
- data/lib/rdf/benchmark.rb +38 -0
- metadata +121 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 11b9b218709e7c01b2d0c924c058b8d934e3ac7b
|
4
|
+
data.tar.gz: bb4859eb9b2075ccd9178d6ab7ffd6439121b3fb
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5d5c09fd5fd549d1d3f86f0bc933644b0afa455df95c3bf168cede0d6157d914e7a0bc41206aba5b3f752d1d7c561202be3666c52eade841d67df1b55312de50
|
7
|
+
data.tar.gz: c76b25a9f4137084d600688258ac8fc73757b1b7819997b69b89b4c2f61a1068bbb02c9347eb4dffa4eac4fc9b76ab995f6e78916ab7c8aac1ff951c48c67a93
|
data/AUTHORS
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
* Tom Johnson <n0reply@uw.edu>
|
data/README.md
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
RDF::Benchmark
|
2
|
+
==============
|
3
|
+
|
4
|
+
[![Build Status](https://travis-ci.org/ruby-rdf/rdf.png?branch=master)](http://travis-ci.org/ruby-rdf/rdf-benchmark)
|
5
|
+
|
6
|
+
A benchmark framework for [RDF.rb](http://ruby-rdf.github.com/rdf).
|
7
|
+
|
8
|
+
## Contributing
|
9
|
+
|
10
|
+
This repository uses [Git Flow](https://github.com/nvie/gitflow) to mange development and release activity. All submissions _must_ be on a feature branch based on the _develop_ branch to ease staging and integration.
|
11
|
+
|
12
|
+
* Do your best to adhere to the existing coding conventions and idioms.
|
13
|
+
* Don't use hard tabs, and don't leave trailing whitespace on any line.
|
14
|
+
Before committing, run `git diff --check` to make sure of this.
|
15
|
+
* Do document every method you add using [YARD][] annotations. Read the
|
16
|
+
[tutorial][YARD-GS] or just look at the existing code for examples.
|
17
|
+
* Don't touch the `.gemspec` or `VERSION` files. If you need to change them,
|
18
|
+
do so on your private branch only.
|
19
|
+
* Do feel free to add yourself to the `CREDITS` file and the
|
20
|
+
corresponding list in the the `README`. Alphabetical order applies.
|
21
|
+
* Don't touch the `AUTHORS` file. If your contributions are significant
|
22
|
+
enough, be assured we will eventually add you in there.
|
23
|
+
* Do note that in order for us to merge any non-trivial changes (as a rule
|
24
|
+
of thumb, additions larger than about 15 lines of code), we need an
|
25
|
+
explicit [public domain dedication][PDD] on record from you.
|
26
|
+
|
27
|
+
## License
|
28
|
+
|
29
|
+
This is free and unencumbered public domain software. For more information,
|
30
|
+
see <http://unlicense.org/> or the accompanying {file:UNLICENSE} file.
|
31
|
+
|
data/UNLICENSE
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
This is free and unencumbered software released into the public domain.
|
2
|
+
|
3
|
+
Anyone is free to copy, modify, publish, use, compile, sell, or
|
4
|
+
distribute this software, either in source code form or as a compiled
|
5
|
+
binary, for any purpose, commercial or non-commercial, and by any
|
6
|
+
means.
|
7
|
+
|
8
|
+
In jurisdictions that recognize copyright laws, the author or authors
|
9
|
+
of this software dedicate any and all copyright interest in the
|
10
|
+
software to the public domain. We make this dedication for the benefit
|
11
|
+
of the public at large and to the detriment of our heirs and
|
12
|
+
successors. We intend this dedication to be an overt act of
|
13
|
+
relinquishment in perpetuity of all present and future rights to this
|
14
|
+
software under copyright law.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
19
|
+
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
20
|
+
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
21
|
+
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
22
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
23
|
+
|
24
|
+
For more information, please refer to <http://unlicense.org/>
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.2
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'rdf/ntriples'
|
3
|
+
|
4
|
+
module RDF::Benchmark
|
5
|
+
##
|
6
|
+
# @see http://wifo5-03.informatik.uni-mannheim.de/bizer/berlinsparqlbenchmark/spec/BenchmarkRules/index.html#datagenerator
|
7
|
+
class BerlinGenerator
|
8
|
+
DEFAULT_FILENAME = 'dataset'.freeze
|
9
|
+
DEFAULT_FACTOR = 2_000.freeze
|
10
|
+
DEFAULT_FORMAT = 'nt'.freeze
|
11
|
+
DEFAULT_PATH = './bsbmtools'.freeze
|
12
|
+
|
13
|
+
# @!attribute [rw] filename
|
14
|
+
# @!attribute [rw] product_factor
|
15
|
+
# @!attribute [rw] format
|
16
|
+
# @!attribute [rw] tool_path
|
17
|
+
attr_accessor :filename, :product_factor, :format, :tool_path
|
18
|
+
|
19
|
+
##
|
20
|
+
# @param filename [String] (default: 'dataset')
|
21
|
+
# @param products [Integer] (default: 2000)
|
22
|
+
# @param format [String] (default: 'nt')
|
23
|
+
def initialize(filename: DEFAULT_FILENAME,
|
24
|
+
product_factor: DEFAULT_FACTOR,
|
25
|
+
format: DEFAULT_FORMAT,
|
26
|
+
tool_path: DEFAULT_PATH)
|
27
|
+
self.filename = filename
|
28
|
+
self.product_factor = product_factor
|
29
|
+
self.format = format
|
30
|
+
self.tool_path = tool_path
|
31
|
+
end
|
32
|
+
|
33
|
+
##
|
34
|
+
# @return [RDF::Reader] a stream of the requested data
|
35
|
+
def data(&block)
|
36
|
+
filepath = Pathname.new(tool_path) + "#{filename}.#{format}"
|
37
|
+
generate_data! unless File.exists?(filepath)
|
38
|
+
|
39
|
+
RDF::Reader.open(filepath, &block)
|
40
|
+
end
|
41
|
+
|
42
|
+
##
|
43
|
+
# Generates the data for this instance, writing it to disk.
|
44
|
+
#
|
45
|
+
# @return [Boolean] true if successful
|
46
|
+
#
|
47
|
+
# @note writes the output of the Berlin data generator to stdout
|
48
|
+
def generate_data!
|
49
|
+
start_dir = Dir.pwd
|
50
|
+
|
51
|
+
Dir.chdir tool_path
|
52
|
+
system "./generate -pc #{product_factor} -fn #{filename} -fc"
|
53
|
+
ensure
|
54
|
+
Dir.chdir start_dir
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module RDF::Benchmark
|
3
|
+
class Repository
|
4
|
+
# @!attribute [rw] repository
|
5
|
+
# @return [RDF::Repository] the repository to benchmark
|
6
|
+
attr_accessor :repository
|
7
|
+
|
8
|
+
##
|
9
|
+
# @param generator [#data]
|
10
|
+
# @param repository [RDF::Repository] the repository to benchmark
|
11
|
+
def initialize(generator: , repository:)
|
12
|
+
@generator = generator
|
13
|
+
@repository = repository
|
14
|
+
end
|
15
|
+
|
16
|
+
##
|
17
|
+
# @return [RDF::Enumerator]
|
18
|
+
def statements
|
19
|
+
@generator.data.each_statement
|
20
|
+
end
|
21
|
+
|
22
|
+
##
|
23
|
+
# @param name [#to_s]
|
24
|
+
# @param count [Integer] number of statements to prime for insert
|
25
|
+
#
|
26
|
+
# @return [Benchmark::IPS::Report]
|
27
|
+
def insert!(name: 'insert', count: 100_000)
|
28
|
+
inserts = statements.lazy.take(count)
|
29
|
+
|
30
|
+
report = RDF::Benchmark.benchmark_ips!(name: name) do
|
31
|
+
repository.insert(inserts.next)
|
32
|
+
end
|
33
|
+
|
34
|
+
return report
|
35
|
+
ensure
|
36
|
+
repository.clear
|
37
|
+
end
|
38
|
+
|
39
|
+
##
|
40
|
+
# @param name [#to_s] the name to give the benchmark report
|
41
|
+
# @param count [Integer] number of statements to prime for delete
|
42
|
+
#
|
43
|
+
# @return [Benchmark::IPS::Report]
|
44
|
+
def delete!(name: 'delete', count: 100_000)
|
45
|
+
deletes = statements.lazy.take(count)
|
46
|
+
|
47
|
+
deletes.each { |st| repository.insert(st) }
|
48
|
+
|
49
|
+
report = RDF::Benchmark.benchmark_ips!(name: name) do
|
50
|
+
repository.delete(deletes.next)
|
51
|
+
end
|
52
|
+
|
53
|
+
return report
|
54
|
+
ensure
|
55
|
+
repository.clear
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'rdf'
|
3
|
+
require 'benchmark/ips'
|
4
|
+
|
5
|
+
module RDF
|
6
|
+
module Benchmark
|
7
|
+
##
|
8
|
+
# Benchmarks the given block, measuring iterations per second.
|
9
|
+
#
|
10
|
+
# @param name [String]
|
11
|
+
# @param time [Integer]
|
12
|
+
# @param warmup [Integer]
|
13
|
+
# @yield runs the block repeatedly as a Benchmark#ips report
|
14
|
+
#
|
15
|
+
# @return [Benchmark::IPS::Report]
|
16
|
+
# @see Benchmark#ips
|
17
|
+
def self.benchmark_ips!(name: , time: 5, warmup: 2, &block)
|
18
|
+
::Benchmark.ips do |bm|
|
19
|
+
bm.config(:time => time, :warmup => warmup)
|
20
|
+
bm.report(name, &block)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
##
|
25
|
+
# Benchmarks a single run of the given block (with warmup).
|
26
|
+
#
|
27
|
+
# @param name [String]
|
28
|
+
# @yield runs the block as a Benchmark#bmbm report
|
29
|
+
#
|
30
|
+
# @return [Benchmark::Report]
|
31
|
+
# @see Benchmark#bmbm
|
32
|
+
def self.benchmark!(name:, &block)
|
33
|
+
::Benchmark.bmbm do |bm|
|
34
|
+
bm.report(name, &block)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
metadata
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rdf-benchmark
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tom Johnson
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-07-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rdf
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: benchmark-ips
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.6'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.6'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: yard
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.8'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.8'
|
83
|
+
description: Dataset Generation & Benchmarks for RDF.rb
|
84
|
+
email: public-rdf-ruby@w3.org
|
85
|
+
executables: []
|
86
|
+
extensions: []
|
87
|
+
extra_rdoc_files: []
|
88
|
+
files:
|
89
|
+
- AUTHORS
|
90
|
+
- README.md
|
91
|
+
- UNLICENSE
|
92
|
+
- VERSION
|
93
|
+
- lib/rdf/benchmark.rb
|
94
|
+
- lib/rdf/benchmark/berlin_generator.rb
|
95
|
+
- lib/rdf/benchmark/repository.rb
|
96
|
+
homepage: http://ruby-rdf.github.com/rdf-benchmark
|
97
|
+
licenses:
|
98
|
+
- Public Domain
|
99
|
+
metadata: {}
|
100
|
+
post_install_message:
|
101
|
+
rdoc_options: []
|
102
|
+
require_paths:
|
103
|
+
- lib
|
104
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - ">="
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: 2.0.0
|
109
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '0'
|
114
|
+
requirements: []
|
115
|
+
rubyforge_project:
|
116
|
+
rubygems_version: 2.5.1
|
117
|
+
signing_key:
|
118
|
+
specification_version: 4
|
119
|
+
summary: Dataset Generation & Benchmarks for RDF.rb
|
120
|
+
test_files: []
|
121
|
+
has_rdoc: false
|