krojew / bb8

r2d2 but async

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

bb8

A generic connection pool, designed for asynchronous tokio-based connections. This is an asynchronous tokio-based version of r2d2.

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.

bb8 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
tokio-postgres bb8-postgres
redis bb8-redis

Example

Using an imaginary "foodb" database.

use std::thread;

extern crate bb8;
extern crate bb8_foodb;

fn main() {
    let manager = bb8_foodb::FooConnectionManager::new("localhost:1234");
    let pool = bb8::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 the MIT license (LICENSE).

Contribution

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

About

r2d2 but async

License:MIT License


Languages

Language:Rust 100.0%