Skip to content

Commit

Permalink
Add benchmark
Browse files Browse the repository at this point in the history
  • Loading branch information
Watson1978 committed Nov 7, 2023
1 parent 5712f6f commit 77ea8cd
Show file tree
Hide file tree
Showing 3 changed files with 152 additions and 1 deletion.
Binary file added example/benchmark-ips.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
151 changes: 151 additions & 0 deletions example/benchmark.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
require 'bundler/inline'
gemfile do
source 'https://rubygems.org'
gem 'benchmark-ips'
gem 'sorted_set'
gem 'cassandra-driver', require: 'cassandra'
gem 'ilios'
end


Ilios::Cassandra.config = {
keyspace: 'ilios',
hosts: ['127.0.0.1'],
}

# Create table
statement = Ilios::Cassandra.session.prepare(<<~CQL)
CREATE TABLE IF NOT EXISTS ilios.benchmark (
id bigint,
message text,
created_at timestamp,
PRIMARY KEY (id)
) WITH compaction = { 'class' : 'LeveledCompactionStrategy' }
AND gc_grace_seconds = 691200;
CQL
Ilios::Cassandra.session.execute(statement)


class BenchmarkCassandra
def initialize
@cluster = Cassandra.cluster
@keyspace = 'ilios'
@session = @cluster.connect(@keyspace)
end

def run_execute(x)
x.report('cassandra-driver:execute') do
@session.execute(statement, {
arguments: {
id: Random.rand(2**40),
message: 'hello',
created_at: Time.now
}
})
end
end

def run_execute_async(x)
x.report('cassandra-driver:execute_async') do
future = @session.execute_async(statement, {
arguments: {
id: Random.rand(2**40),
message: 'hello',
created_at: Time.now
}
})
future.on_success do |rows|
end
end
end

def statement
@statement ||= @session.prepare(<<~CQL)
INSERT INTO ilios.benchmark (
id,
message,
created_at
) VALUES (?, ?, ?)
CQL
end
end

class BenchmarkIlios
def run_execute(x)
x.report('ilios:execute') do
statement.bind({
id: Random.rand(2**40),
message: 'hello',
created_at: Time.now
})
Ilios::Cassandra.session.execute(statement)
end
end

def run_execute_async(x)
x.report('ilios:execute_async') do
statement.bind({
id: Random.rand(2**40),
message: 'hello',
created_at: Time.now
})
future = Ilios::Cassandra.session.execute_async(statement)
future.on_success do |results|
results.each do |row|
end
end
end
end

def statement
@statement ||= Ilios::Cassandra.session.prepare(<<-CQL)
INSERT INTO ilios.benchmark (
id,
message,
created_at
) VALUES (?, ?, ?)
CQL
end
end

puts "[ips]"
Benchmark.ips do |x|
BenchmarkCassandra.new.run_execute(x)
BenchmarkCassandra.new.run_execute_async(x)
end

sleep 3

puts ""
Benchmark.ips do |x|
BenchmarkIlios.new.run_execute(x)
BenchmarkIlios.new.run_execute_async(x)
end

=begin
## Environment
- OS: Manjaro Linux x86_64
- CPU: AMD Ryzen 9 7940HS
- Compiler: gcc 13.2.1
- Ruby: ruby 3.2.2
## Results
[ips]
Warming up --------------------------------------
cassandra-driver:execute
396.000 i/100ms
cassandra-driver:execute_async
3.506k i/100ms
Calculating -------------------------------------
cassandra-driver:execute
3.142k (±32.8%) i/s - 9.900k in 5.092600s
cassandra-driver:execute_async
36.423k (±27.0%) i/s - 157.770k in 5.003134s
Warming up --------------------------------------
ilios:execute 292.000 i/100ms
ilios:execute_async 315.000 i/100ms
Calculating -------------------------------------
ilios:execute 4.540k (± 4.8%) i/s - 22.776k in 5.030420s
ilios:execute_async 167.021k (±27.0%) i/s - 770.175k in 4.994409s
=end
2 changes: 1 addition & 1 deletion ilios.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
spec.files =
Dir.chdir(__dir__) do
`git ls-files -z`.split("\x0").reject do |f|
(f == __FILE__) || f.match(%r{\A(?:(?:test)/|\.(?:git|editorconfig|rubocop.*))})
(f == __FILE__) || f.match(%r{\A(?:(?:test|example)/|\.(?:git|editorconfig|rubocop.*))})
end
end
spec.require_paths = ['lib']
Expand Down

0 comments on commit 77ea8cd

Please sign in to comment.