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 2aaee67
Show file tree
Hide file tree
Showing 2 changed files with 149 additions and 0 deletions.
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.
149 changes: 149 additions & 0 deletions example/benchmark.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
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|
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
## Results
[ips]
Warming up --------------------------------------
cassandra-driver:execute
407.000 i/100ms
cassandra-driver:execute_async
3.502k i/100ms
Calculating -------------------------------------
cassandra-driver:execute
3.609k (±34.6%) i/s - 10.582k in 5.016427s
cassandra-driver:execute_async
37.477k (±25.7%) i/s - 164.594k in 5.010235s
Warming up --------------------------------------
ilios:execute 184.000 i/100ms
ilios:execute_async 296.000 i/100ms
Calculating -------------------------------------
ilios:execute 4.565k (± 3.8%) i/s - 22.816k in 5.005611s
ilios:execute_async 174.329k (±27.0%) i/s - 798.312k in 4.996354s
=end

0 comments on commit 2aaee67

Please sign in to comment.