r2d2 alternatives and similar packages
Based on the "Database" category.
Alternatively, view r2d2 alternatives based on common mentions on social networks and blogs.
-
MeiliSearch
A lightning-fast search API that fits effortlessly into your apps, websites, and workflow -
cdrs
Cassandra DB native client written in Rust language. Find 1.x versions on https://github.com/AlexPikalov/cdrs/tree/v.1.x Looking for an async version? - Check WIP https://github.com/AlexPikalov/cdrs-async -
PickleDB
PickleDB-rs is a lightweight and simple key-value store. It is a Rust version for Python's PickleDB
SaaSHub - Software Alternatives and Reviews
Do you think we are missing an alternative of r2d2 or a related project?
Popular Comparisons
README
r2d2
A generic connection pool for Rust.
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 |
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
- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
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.
*Note that all licence references and agreements mentioned in the r2d2 README section above
are relevant to that project's source code only.