sfackler/r2d2


A generic connection pool for Rust

License: Apache-2.0

Language: Rust


r2d2

CircleCI

A generic connection pool for Rust.

Documentation

Opening a new database connection every time one is needed is both inefficient and can lead to resource exhaustion under high traffic conditions. A connection pool maintains a set of open connections to a database, handing them out for repeated use.

r2d2 is agnostic to the connection type it is managing. Implementors of the ManageConnection trait provide the database-specific logic to create and check the health of connections.

A (possibly not exhaustive) list of adaptors for different backends:

Backend Adaptor Crate
rust-postgres r2d2-postgres
redis-rs use r2d2 feature of redis-rs
rust-memcache r2d2-memcache
rust-mysql-simple r2d2-mysql
rusqlite r2d2-sqlite
rsfbclient r2d2-firebird
rusted-cypher r2d2-cypher
diesel diesel::r2d2 (docs)
couchdb r2d2-couchdb
mongodb (archived)
use official mongodb driver instead
r2d2-mongodb
(deprecated: official driver handles pooling internally)
odbc r2d2-odbc
jfs r2d2-jfs
oracle r2d2-oracle
ldap3 r2d2-ldap
duckdb-rs use r2d2 feature of duckdb-rs

Example

Using an imaginary "foodb" database.

use std::thread;

extern crate r2d2;
extern crate r2d2_foodb;

fn main() {
    let manager = r2d2_foodb::FooConnectionManager::new("localhost:1234");
    let pool = r2d2::Pool::builder()
        .max_size(15)
        .build(manager)
        .unwrap();

    for _ in 0..20 {
        let pool = pool.clone();
        thread::spawn(move || {
            let conn = pool.get().unwrap();
            // use the connection
            // it will be returned to the pool when it falls out of scope.
        })
    }
}

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you shall be dual licensed as above, without any additional terms or conditions.

Project Statistics

Sourcerank 14
Repository Size 313 KB
Stars 1,485
Forks 79
Watchers 17
Open issues 23
Dependencies 3
Contributors 32
Tags 41
Created
Last updated
Last pushed

Top Contributors See all

Steven Fackler Sage Griffin Cody Schafer Alex Crichton Markus Kohlhase Andrew Dona-Couch -- GitHub drop ICE Popa Marius Adrian Christoph Herzog Rushmore Mushambi Peter Majchrak Hai-Hsin Konstantin V. Salikhov Wang Fenjin Paolo Barbolini Bob Flarp uvd Ben yanyuxing Yuki Okushi

Packages Referencing this Repo

r2d2
A generic connection pool
Latest release 0.8.10 - Updated - 1.49K stars

Recent Tags See all

v0.8.10 June 21, 2022
v0.8.9 June 30, 2020
v0.8.8 December 25, 2019
v0.8.7 November 26, 2019
v0.8.6 October 19, 2019
v0.8.5 June 07, 2019
v0.8.4 April 02, 2019
v0.8.3 November 03, 2018
v0.8.2 December 24, 2017
v0.8.1 November 28, 2017
v0.8.0 November 26, 2017
v0.7.4 September 07, 2017
v0.7.3 July 10, 2017
v0.7.2 April 19, 2017
v0.7.1 October 20, 2016

Interesting Forks See all

sgrif/r2d2
A generic connection pool for Rust
Rust - Last pushed - 1 stars

Something wrong with this page? Make a suggestion

Last synced: 2024-08-02 11:23:26 UTC

Login to resync this repository