Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is a rough sketch for query pipelining support. Pipelined queries in most DBs are implemented as:
Benchmark
Time spent on 100k
SELECT 42
queries (lower is better):That's 55% less wall-clock time and 58% less CPU time with
localhost
latency. For databases where latency might be in the 1-2ms range, the difference will probably be orders of magnitude. In fact, it might've been a more dramatic difference but I had to split the pipelines into chunks — see "known issues" below.Usage
Via
crystal-lang/crystal-db
:The API I had in mind with this is that
query_one
,query_all
, andquery_each
becomequery
inside thepipeline
block andread_one
,read_all
, andread_each
when you're consuming results.Known issues/Remaining work to do
exec
support10_000.times { pipe.query "..." }
PG::Connection
?Example:
Closes #155