feat(storage): use a connection pool #347
Merged
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.
Instead of re-opening the Sqlite database for each request Storage now contains a connection pool.
We're using
r2d2
with a blocking API because this was the smallest change (therusqlite
API is blocking, too, and these calls are already called fromspawn_blocking()
tasks). This also means that when we've reached the maximum number of connections (10 by default) getting a connection from the pool will block. This is probably better behavior than running an arbitrary number of SQL queries in parallel (which we were doing) but it still means that we're using one thread from tokio's blocking thread pool for waiting for a new connection to be available.The
load-test
tool shows significantly improved performance.Before:
After: