From 720d61e00ad910fe249bc40af0484257b0ce62a6 Mon Sep 17 00:00:00 2001 From: Petrik Date: Mon, 20 Oct 2025 19:18:41 +0200 Subject: [PATCH] [ruby/agoo] Use prepared statements +------------------------+-----+-----+-------+ | branch_name| db|query|fortune| +------------------------+-----+-----+-------+ | master|69028|68419| 60723| |agoo/prepared-statements|98140|78085| 71027| +------------------------+-----+-----+-------+ --- frameworks/Ruby/agoo/app.rb | 62 +++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 33 deletions(-) diff --git a/frameworks/Ruby/agoo/app.rb b/frameworks/Ruby/agoo/app.rb index 8c01a4852ba..2c8e64bc9a9 100644 --- a/frameworks/Ruby/agoo/app.rb +++ b/frameworks/Ruby/agoo/app.rb @@ -7,13 +7,17 @@ require 'rack' $pool = ConnectionPool.new(size: 1, timeout: 5) do - PG::Connection.new({ - dbname: 'hello_world', - host: 'tfb-database', - user: 'benchmarkdbuser', - password: 'benchmarkdbpass' - }) - end + conn = PG::Connection.new({ + dbname: 'hello_world', + host: 'tfb-database', + user: 'benchmarkdbuser', + password: 'benchmarkdbpass' + }) + conn.set_error_verbosity(PG::PQERRORS_VERBOSE) + conn.prepare('select_world', 'SELECT * FROM world WHERE id = $1') + conn.prepare('select_fortune', 'SELECT id, message FROM fortune') + conn +end QUERY_RANGE = (1..10_000).freeze ALL_IDS = QUERY_RANGE.to_a @@ -43,11 +47,7 @@ def self.get_one_random_number def self.get_one_record(id = get_one_random_number) $pool.with do |conn| - conn.exec_params(<<-SQL, [id]).first - - SELECT * FROM world WHERE id = $1 - - SQL + conn.exec_prepared('select_world', [id]).first end end @@ -114,15 +114,12 @@ def self.call(_req) end end + class FortunesHandler < BaseHandler def self.call(_req) f_1 = $pool.with do |conn| - conn.exec(<<-SQL) - - SELECT id, message FROM fortune - - SQL - end + conn.exec_prepared('select_fortune', []) + end f_2 = f_1.map(&:to_h). append({ 'id' => '0', 'message' => 'Additional fortune added at request time.' }). @@ -192,21 +189,20 @@ def self.call(req) end Agoo::Log.configure({ - classic: true, - colorize: true, - console: true, - dir: '', - states: { - DEBUG: false, - INFO: false, - - connect: false, - eval: false, - push: false, - request: false, - response: false - } - }) + classic: true, + colorize: true, + console: true, + dir: '', + states: { + DEBUG: false, + INFO: false, + connect: false, + eval: false, + push: false, + request: false, + response: false + } +}) worker_count = 4 worker_count = ENV['AGOO_WORKER_COUNT'].to_i if ENV.key?('AGOO_WORKER_COUNT')