#influx-db #pool #r2d2

r2d2-influxdb

r2d2连接池协议用于InfluxDB

1 个不稳定版本

0.1.0 2020年2月20日

#2762 in 数据库接口

MIT 许可证

12KB
197

r2d2-influxdb

Rust的InfluxDB连接池

travis-ci.org crates.io Documentation

influxdb-rust 是一个支持 r2d2 连接池协议的库。

用法

将以下内容添加到您的 Cargo.toml

[dependencies]
r2d2-influxdb = "0.1.0"

然后查看下面的示例。

示例

请参阅 示例 获取可运行的示例。

快速入门

使用 pool.get(),我们可以基本获得一个同步的 influxdb::Client 包装器,它继承了所有魔法,只需 async/await

extern crate r2d2_influxdb;

use r2d2_influxdb::{influxdb, r2d2, AuthInfo, InfluxDBConnectionManager};
use std::thread;

use influxdb::{Query, Timestamp};

fn main() {
    let info = AuthInfo {
        url: "https://127.0.0.1:8086".into(),
        database: "weather".into(),
        username: "root".into(),
        password: "root".into(),
    };
    let manager = InfluxDBConnectionManager::new(info);
    let pool = r2d2::Pool::builder().build(manager).unwrap();

    let mut write_handles = vec![];
    let mut read_handles = vec![];

    for _i in 0..10i32 {
        let pool = pool.clone();
        let write_query =
            Query::write_query(Timestamp::Now, "weather").add_field("temperature", _i);
        write_handles.push(thread::spawn(move || {
            let conn = pool.get().unwrap();
            let write_result = conn.query(&write_query);
            println!("{:?}", write_result);
        }));
    }

    for h in write_handles {
        h.join().unwrap();
    }

    for _i in 0..10i32 {
        let pool = pool.clone();
        let read_query = Query::raw_read_query("SELECT * FROM weather");
        read_handles.push(thread::spawn(move || {
            let conn = pool.get().unwrap();
            let read_result = conn.query(&read_query);
            println!("{:?}", read_result);
        }));
    }

    for h in read_handles {
        h.join().unwrap();
    }
}

致谢

本项目深受 r2d2-redis 的启发。

许可证

License: MIT

依赖项

~4–13MB
~185K SLoC