A generic connection pool for Rust
Rust
Latest commit f6f1bd7 Jan 10, 2017 @sfackler committed on GitHub Merge pull request #29 from scorphus/patch-1
Add r2d2-couchdb to the list of adaptors
Permalink
Failed to load latest commit information.
src Rustfmt Nov 20, 2016
.gitignore Ignore IDEA files Oct 20, 2016
.travis.yml Test on 1.8 Apr 15, 2016
Cargo.toml Release v0.7.1 Oct 20, 2016
LICENSE-APACHE Relicense under dual MIT/Apache-2.0 Mar 29, 2016
LICENSE-MIT Bump copyright year Mar 29, 2016
README.md Add r2d2-couchdb to the list of adaptors Jan 10, 2017

README.md

r2d2

A generic connection pool for Rust.

Build Status Latest Version

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 r2d2-redis
rust-mysql-simple r2d2-mysql
rusqlite r2d2-sqlite
rusted-cypher r2d2-cypher
diesel r2d2-diesel
couchdb r2d2-couchdb

Example

Using an imaginary "foodb" database.

use std::thread;

extern crate r2d2;
extern crate r2d2_foodb;

fn main() {
    let config = r2d2::Config::builder()
        .pool_size(15)
        .build();
    let manager = r2d2_foodb::FooConnectionManager::new("localhost:1234");

    let pool = r2d2::Pool::new(config, 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.