chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Rust語(yǔ)言中r2d2基礎(chǔ)用法

科技綠洲 ? 來(lái)源:TinyZ ? 作者:TinyZ ? 2023-09-19 16:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

r2d2是Rust語(yǔ)言的一個(gè)連接池模塊,可以用于管理和復(fù)用數(shù)據(jù)庫(kù)連接。它可以與多種數(shù)據(jù)庫(kù)進(jìn)行交互,包括MySQL、PostgreSQL、SQLite等等。使用r2d2可以提高數(shù)據(jù)庫(kù)操作的效率,避免頻繁地創(chuàng)建和銷毀連接,從而提高程序的性能。

基礎(chǔ)用法

安裝

在使用r2d2之前,需要先在項(xiàng)目中添加r2d2的依賴。可以通過(guò)Cargo.toml文件來(lái)添加依賴:

[dependencies]
r2d2 = "0.8.10"
r2d2_mysql = "23.0.0"
mysql_async = "0.32.0"

創(chuàng)建連接池

在使用r2d2之前,需要先創(chuàng)建一個(gè)連接池。連接池的大小可以根據(jù)實(shí)際情況進(jìn)行調(diào)整。下面是一個(gè)創(chuàng)建MySQL連接池的示例:

use r2d2::{Pool, PooledConnection};
use r2d2_mysql::mysql::PoolOptions;

fn main() {
    let manager = r2d2_mysql::MysqlConnectionManager::new("mysql://user:password@localhost:3306/database").unwrap();
    let pool = Pool::builder().build(manager).unwrap();
}

獲取連接

在創(chuàng)建連接池之后,可以通過(guò)連接池來(lái)獲取數(shù)據(jù)庫(kù)連接。獲取連接時(shí),需要使用get()方法。如果連接池中沒(méi)有可用的連接,get()方法會(huì)阻塞等待,直到有可用的連接為止。下面是一個(gè)獲取MySQL連接的示例:

fn main() {
    let manager = r2d2_mysql::MysqlConnectionManager::new("mysql://user:password@localhost:3306/database").unwrap();
    let pool = Pool::builder().build(manager).unwrap();
    let conn = pool.get().unwrap();
}

使用連接

獲取到連接之后,就可以使用連接來(lái)進(jìn)行數(shù)據(jù)庫(kù)操作了。下面是一個(gè)查詢MySQL數(shù)據(jù)庫(kù)中的數(shù)據(jù)的示例:

fn main() {
    let manager = r2d2_mysql::MysqlConnectionManager::new("mysql://user:password@localhost:3306/database").unwrap();
    let pool = Pool::builder().build(manager).unwrap();
    let conn = pool.get().unwrap();

    let mut stmt = conn.prepare("SELECT * FROM table").unwrap();
    let rows = stmt.query_map([], |row| {
        // 處理查詢結(jié)果
    }).unwrap();
}

釋放連接

使用完連接之后,需要將連接返回給連接池,以便其他程序可以復(fù)用該連接??梢酝ㄟ^(guò)drop()方法來(lái)釋放連接。下面是一個(gè)釋放MySQL連接的示例:

fn main() {
    let manager = r2d2_mysql::MysqlConnectionManager::new("mysql://user:password@localhost:3306/database").unwrap();
    let pool = Pool::builder().build(manager).unwrap();
    let conn = pool.get().unwrap();

    // 使用連接進(jìn)行數(shù)據(jù)庫(kù)操作

    drop(conn);
}

自定義連接池

r2d2提供了一些默認(rèn)的連接池實(shí)現(xiàn),但是也可以通過(guò)實(shí)現(xiàn)r2d2::ManageConnectionr2d2::Pool來(lái)自定義連接池。下面是一個(gè)自定義MySQL連接池的示例:

use r2d2::{Pool, PooledConnection, ManageConnection};
use r2d2_mysql::mysql::{Opts, OptsBuilder, Pool as MysqlPool, PooledConn};

struct MyMysqlConnectionManager {
    pool: MysqlPool,
}

impl MyMysqlConnectionManager {
    fn new(db_url: &str) - > MyMysqlConnectionManager {
        let opts = Opts::from_url(db_url).unwrap();
        let builder = OptsBuilder::from_opts(opts);
        let pool = MysqlPool::new(builder).unwrap();
        MyMysqlConnectionManager { pool }
    }
}

impl ManageConnection for MyMysqlConnectionManager {
    type Connection = PooledConn;
    type Error = r2d2_mysql::mysql::Error;

    fn connect(&self) - > Result< Self::Connection, Self::Error > {
        self.pool.get_conn()
    }

    fn is_valid(&self, conn: &mut Self::Connection) - > Result< (), Self::Error > {
        conn.ping()
    }

    fn has_broken(&self, conn: &mut Self::Connection) - > bool {
        conn.ping().is_err()
    }
}

fn main() {
    let manager = MyMysqlConnectionManager::new("mysql://user:password@localhost:3306/database");
    let pool = Pool::builder().build(manager).unwrap();
    let conn = pool.get().unwrap();
}

自定義連接池配置

可以通過(guò)Pool::builder()方法來(lái)創(chuàng)建連接池配置。連接池的配置可以包括最小連接數(shù)、最大連接數(shù)、連接超時(shí)時(shí)間等等。下面是一個(gè)自定義MySQL連接池配置的示例:

use std::time::Duration;

fn main() {
    let manager = r2d2_mysql::MysqlConnectionManager::new("mysql://user:password@localhost:3306/database").unwrap();
    let pool = Pool::builder()
        .min_idle(Some(5))
        .max_size(20)
        .connection_timeout(Duration::from_secs(30))
        .build(manager)
        .unwrap();
}

連接池監(jiān)控

r2d2提供了一些方法來(lái)監(jiān)控連接池的狀態(tài)??梢酝ㄟ^(guò)Pool::state()方法來(lái)獲取連接池的狀態(tài),包括已經(jīng)創(chuàng)建的連接數(shù)、正在使用的連接數(shù)、空閑的連接數(shù)等等。下面是一個(gè)獲取MySQL連接池狀態(tài)的示例:

fn main() {
    let manager = r2d2_mysql::MysqlConnectionManager::new("mysql://user:password@localhost:3306/database").unwrap();
    let pool = Pool::builder().build(manager).unwrap();

    let state = pool.state();
    println!("created connections: {}", state.created_connections);
    println!("idle connections: {}", state.idle_connections);
    println!("in use connections: {}", state.in_use_connections);
}

自定義連接池事件處理器

r2d2提供了一些事件處理器,可以在連接池中的連接被創(chuàng)建、被借用、被歸還、被銷毀時(shí)觸發(fā)事件??梢酝ㄟ^(guò)實(shí)現(xiàn)r2d2::HandleEvent來(lái)自定義事件處理器。下面是一個(gè)自定義MySQL連接池事件處理器的示例:

use r2d2::{Pool, PooledConnection, ManageConnection, HandleEvent};
use r2d2_mysql::mysql::PoolOptions;

struct MyEventHandler;

impl HandleEvent for MyEventHandler {
    fn on_acquire(&self, conn: &mut PooledConnection< '_, MysqlConnectionManager >) - > Result< (), r2d2::Error > {
        println!("connection acquired");
        Ok(())
    }

    fn on_release(&self, conn: &mut PooledConnection< '_, MysqlConnectionManager >) - > Result< (), r2d2::Error > {
        println!("connection released");
        Ok(())
    }

    fn on_check_out(&self, conn: &mut PooledConnection< '_, MysqlConnectionManager >) - > Result< (), r2d2::Error > {
        println!("connection checked out");
        Ok(())
    }

    fn on_check_in(&self, conn: &mut PooledConnection< '_, MysqlConnectionManager >) - > Result< (), r2d2::Error > {
        println!("connection checked in");
        Ok(())
    }
}

fn main() {
    let manager = r2d2_mysql::MysqlConnectionManager::new("mysql://user:password@localhost:3306/database").unwrap();
    let pool = Pool::builder()
        .event_handler(Box::new(MyEventHandler))
        .build(manager)
        .unwrap();
}

自定義連接池超時(shí)處理器

r2d2提供了一個(gè)默認(rèn)的連接池超時(shí)處理器,當(dāng)連接池中沒(méi)有可用的連接時(shí),會(huì)等待一定的時(shí)間,如果仍然沒(méi)有可用的連接,則會(huì)返回錯(cuò)誤。可以通過(guò)實(shí)現(xiàn)r2d2::HandleError來(lái)自定義連接池超時(shí)處理器。下面是一個(gè)自定義MySQL連接池超時(shí)處理器的示例:

use std::time::Duration;
use r2d2::{Pool, PooledConnection, ManageConnection, HandleError};
use r2d2_mysql::mysql::PoolOptions;

struct MyErrorHandler;

impl HandleError< r2d2_mysql::mysql::Error > for MyErrorHandler {
    fn handle_error(&self, error: r2d2_mysql::mysql::Error) - > r2d2::Action {
        match error {
            r2d2_mysql::mysql::Error::Timeout = > r2d2::Action::Retry(Duration::from_secs(5)),
            _ = > r2d2::Action::Fail,
        }
    }
}

fn main() {
    let manager = r2d2_mysql::MysqlConnectionManager::new("mysql://user:password@localhost:3306/database").unwrap();
    let pool = Pool::builder()
        .connection_timeout(Duration::from_secs(30))
        .error_handler(Box::new(MyErrorHandler))
        .build(manager)
        .unwrap();
}

自定義連接池初始化器

r2d2提供了一個(gè)默認(rèn)的連接池初始化器,當(dāng)連接池中沒(méi)有可用的連接時(shí),會(huì)自動(dòng)創(chuàng)建新的連接??梢酝ㄟ^(guò)實(shí)現(xiàn)r2d2::Initializer來(lái)自定義連接池初始化器。下面是一個(gè)自定義MySQL連接池初始化器的示例:

use r2d2::{Pool, PooledConnection, ManageConnection, Initializer};
use r2d2_mysql::mysql::{Opts, OptsBuilder, Pool as MysqlPool, PooledConn};

struct MyMysqlConnectionManager {
    pool: MysqlPool,
}

impl MyMysqlConnectionManager {
    fn new(db_url: &str) - > MyMysqlConnectionManager {
        let opts = Opts::from_url(db_url).unwrap();
        let builder = OptsBuilder::from_opts(opts);
        let pool = MysqlPool::new(builder).unwrap();
        MyMysqlConnectionManager { pool }
    }
}

impl ManageConnection for MyMysqlConnectionManager {
    type Connection = PooledConn;
    type Error = r2d2_mysql::mysql::Error;

    fn connect(&self) - > Result< Self::Connection, Self::Error > {
        self.pool.get_conn()
    }

    fn is_valid(&self, conn: &mut Self::Connection) - > Result< (), Self::Error > {
        conn.ping()
    }

    fn has_broken(&self, conn: &mut Self::Connection) - > bool {
        conn.ping().is_err()
    }
}

struct MyInitializer;

impl Initializer< MyMysqlConnectionManager > for MyInitializer {
    type Error = r2d2_mysql::mysql::Error;

    fn initialize(&self, conn: &mut PooledConnection< '_, MyMysqlConnectionManager >) - > Result< (), Self::Error > {
        // 初始化連接
        Ok(())
    }
}

fn main() {
    let manager = MyMysqlConnectionManager::new("mysql://user:password@localhost:3306/database");
    let pool = Pool::builder()
        .initializer(Box::new(MyInitializer))
        .build(manager)
        .unwrap();
    let conn = pool.get().unwrap();
}

自定義連接池回收器

r2d2提供了一個(gè)默認(rèn)的連接池回收器,當(dāng)連接池中的連接空閑時(shí)間超過(guò)一定的時(shí)間時(shí),會(huì)自動(dòng)關(guān)閉連接。可以通過(guò)實(shí)現(xiàn)r2d2::ConnectionManager來(lái)自定義連接池回收器。下面是一個(gè)自定義MySQL連接池回收器的示例:

use std::time::Duration;
use r2d2::{Pool, PooledConnection, ManageConnection, ConnectionManager};
use r2d2_mysql::mysql::{Opts, OptsBuilder, Pool as MysqlPool, PooledConn};

struct MyMysqlConnectionManager {
    pool: MysqlPool,
}

impl MyMysqlConnectionManager {
    fn new(db_url: &str) - > MyMysqlConnectionManager {
        let opts = Opts::from_url(db_url).unwrap();
        let builder = OptsBuilder::from_opts(opts);
        let pool = MysqlPool::new(builder).unwrap();
        MyMysqlConnectionManager { pool }
    }
}

impl ManageConnection for MyMysqlConnectionManager {
    type Connection = PooledConn;
    type Error = r2d2_mysql::mysql::Error;

    fn connect(&self) - > Result< Self::Connection, Self::Error > {
        self.pool.get_conn()
    }

    fn is_valid(&self, conn: &mut Self::Connection) - > Result< (), Self::Error > {
        conn.ping()
    }

    fn has_broken(&self, conn: &mut Self::Connection) - > bool {
        conn.ping().is_err()
    }
}

struct MyConnectionManager;

impl ConnectionManager< MyMysqlConnectionManager > for MyConnectionManager {
    fn recycle_check(&self, conn: &mut PooledConnection< '_, MyMysqlConnectionManager >) - > Result< (), r2d2::Error > {
        // 回收連接
        Ok(())
    }
}

fn main() {
    let manager = MyMysqlConnectionManager::new("mysql://user:password@localhost:3306/database");
    let pool = Pool::builder()
        .connection_customizer(Box::new(MyConnectionManager))
        .build(manager)
        .unwrap();
    let conn = pool.get().unwrap();
}

自定義連接池失效檢測(cè)操作

r2d2模塊支持自定義連接池失效檢測(cè)操作,例如在連接池中的連接失效時(shí)需要執(zhí)行的操作。以下是自定義連接池失效檢測(cè)操作的示例代碼:

use r2d2::Pool;
use r2d2_mysql::mysql::OptsBuilder;
use r2d2_mysql::mysql::PoolOptions;

fn main() {
    let mut builder = OptsBuilder::new();
    builder.ip_or_hostname(Some("localhost"))
           .user(Some("root"))
           .pass(Some("password"))
           .db_name(Some("test"));
    let opts = builder.into();
    let pool = Pool::builder()
        .test_on_acquire(true)
        .test_on_check_out(true)
        .max_lifetime(Duration::from_secs(60))
        .build(PoolOptions::new(), opts)
        .unwrap();
}

在以上示例代碼中,我們使用了test_on_acquire和test_on_check_out方法來(lái)設(shè)置連接池失效檢測(cè)操作。在test_on_acquire和test_on_check_out方法中,我們可以執(zhí)行任意的操作,例如檢查連接是否失效等。

最佳實(shí)踐

在使用r2d2模塊時(shí),我們需要遵循以下最佳實(shí)踐:

  • ? 將連接池作為全局對(duì)象,并在程序啟動(dòng)時(shí)初始化連接池。
  • ? 在使用連接池獲取連接時(shí),需要使用連接池的get方法,并在使用完連接后及時(shí)釋放連接。
  • ? 在使用連接池執(zhí)行SQL語(yǔ)句時(shí),需要使用事務(wù)來(lái)保證數(shù)據(jù)的一致性。
  • ? 在自定義連接池配置時(shí),需要根據(jù)實(shí)際需求進(jìn)行靈活配置,例如連接池的大小、超時(shí)時(shí)間、初始化操作等。
  • ? 在多線程環(huán)境下使用連接池時(shí),需要使用Arc
    來(lái)共享連接池對(duì)象,并保證連接池的線程安全性。

總結(jié)

r2d2是一個(gè)Rust語(yǔ)言的連接池模塊,可以用于管理和重用數(shù)據(jù)庫(kù)連接,避免了頻繁地創(chuàng)建和銷毀連接的開銷,提高了數(shù)據(jù)庫(kù)操作的效率和性能。在使用r2d2時(shí),需要進(jìn)行錯(cuò)誤處理;可以根據(jù)具體需求進(jìn)行自定義連接池的實(shí)現(xiàn),以滿足項(xiàng)目的需求。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3979

    瀏覽量

    67429
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3832

    瀏覽量

    84359
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    891

    瀏覽量

    28885
  • rust語(yǔ)言
    +關(guān)注

    關(guān)注

    0

    文章

    57

    瀏覽量

    3218
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    SQLx在Rust語(yǔ)言中的基礎(chǔ)用法和進(jìn)階用法

    SQLx是一個(gè)Rust語(yǔ)言的異步SQL執(zhí)行庫(kù),它支持多種數(shù)據(jù)庫(kù),包括MySQL、PostgreSQL、SQLite等。本教程將以MySQL數(shù)據(jù)庫(kù)為例,介紹SQLx在Rust語(yǔ)言中的基礎(chǔ)
    的頭像 發(fā)表于 09-19 14:32 ?6784次閱讀

    Rust語(yǔ)言中錯(cuò)誤處理的機(jī)制

    Rust語(yǔ)言中,錯(cuò)誤處理是一項(xiàng)非常重要的任務(wù)。由于Rust語(yǔ)言采用靜態(tài)類型檢查,在編譯時(shí)就能發(fā)現(xiàn)很多潛在的錯(cuò)誤,這使得程序員能夠更加自信和高效地開發(fā)程序。然而,即使我們?cè)诰幾g時(shí)盡可能
    的頭像 發(fā)表于 09-19 14:54 ?2131次閱讀

    基于Rust語(yǔ)言Hash特征的基礎(chǔ)用法和進(jìn)階用法

    ,包括Hash trait、HashMap、HashSet等,本教程將詳細(xì)介紹Rust語(yǔ)言Hash特征的基礎(chǔ)用法和進(jìn)階用法。 基礎(chǔ)用法 使用
    的頭像 發(fā)表于 09-19 16:02 ?2043次閱讀

    Rust語(yǔ)言中的反射機(jī)制

    Rust語(yǔ)言的反射機(jī)制指的是在程序運(yùn)行時(shí)獲取類型信息、變量信息等的能力。Rust語(yǔ)言中的反射機(jī)制主要通過(guò) Any 實(shí)現(xiàn)。 std::any::Any trait Any trait是所
    的頭像 發(fā)表于 09-19 16:11 ?3514次閱讀

    Rust語(yǔ)言如何與 InfluxDB 集成

    的數(shù)據(jù)處理和存儲(chǔ)能力。 本教程將介紹 Rust 語(yǔ)言如何與 InfluxDB 集成,包括基礎(chǔ)用法和進(jìn)階用法和完整的示例代碼。 基礎(chǔ)用法 安裝
    的頭像 發(fā)表于 09-30 16:45 ?1678次閱讀

    基于Rust語(yǔ)言中的生命周期

    Rust是一門系統(tǒng)級(jí)編程語(yǔ)言具備高效、安和并發(fā)等特,而生命周期是這門語(yǔ)言中比較重要的概念之一。在這篇教程中,我們會(huì)了解什么是命周期、為什么需要生命周期、如何使用生命周期,同時(shí)我們依然會(huì)使用老朋友
    的頭像 發(fā)表于 09-19 17:03 ?1337次閱讀

    Rust的 match 語(yǔ)句用法

    Rust 是一門現(xiàn)代化的系統(tǒng)編程語(yǔ)言,它擁有高性能、內(nèi)存安全和并發(fā)性等特點(diǎn)。Rust 的語(yǔ)法設(shè)計(jì)非常優(yōu)秀,其中 match 語(yǔ)句是一種非常強(qiáng)大的語(yǔ)言特性。match 語(yǔ)句可以讓我們根據(jù)
    的頭像 發(fā)表于 09-19 17:08 ?1455次閱讀

    Rust 語(yǔ)言中的 RwLock內(nèi)部實(shí)現(xiàn)原理

    Rust是一種系統(tǒng)級(jí)編程語(yǔ)言,它帶有嚴(yán)格的內(nèi)存管理、并發(fā)和安全性規(guī)則,因此很受廣大程序員的青睞。RwLock(讀寫鎖)是 Rust 中常用的線程同步機(jī)制之一,本文將詳細(xì)介紹 Rust
    的頭像 發(fā)表于 09-20 11:23 ?1363次閱讀

    自制會(huì)發(fā)出R2D2“嗶嗶聲”的PCB

    描述R2D2(極簡(jiǎn)主義)這款 PCB 的靈感來(lái)自科幻中最受歡迎的機(jī)器人之一。它采用極簡(jiǎn)設(shè)計(jì),保留了其獨(dú)特的輪廓,并且可以通過(guò)小型蜂鳴器發(fā)出 R2D2 的“嗶嗶聲”,并通過(guò) RGB LED 發(fā)出光信號(hào)
    發(fā)表于 07-27 07:49

    C語(yǔ)言中的#和##的用法

    和conStr的參數(shù),并且宏conStr和toString中均含有#或者##符號(hào),所以A不能被解引用。導(dǎo)致不符合預(yù)期的情況出現(xiàn)。 3.2 解決方案 結(jié)果: 責(zé)任編輯:xj 原文標(biāo)題:C語(yǔ)言中#和##的用法 文章出處:【微信公眾號(hào):嵌入式ARM】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明
    的頭像 發(fā)表于 12-06 09:34 ?7.8w次閱讀
    C<b class='flag-5'>語(yǔ)言中</b>的#和##的<b class='flag-5'>用法</b>

    C語(yǔ)言中的typedef的用法

    在以前的學(xué)習(xí)中對(duì)于C語(yǔ)言中typedef和define的認(rèn)識(shí)是,#define是宏,作用是簡(jiǎn)單的替換,而typedef也是替換,只不過(guò)比define高級(jí)的是在替換的時(shí)候會(huì)進(jìn)行語(yǔ)法檢查。但是后來(lái)
    發(fā)表于 01-13 13:36 ?0次下載
    C<b class='flag-5'>語(yǔ)言中</b>的typedef的<b class='flag-5'>用法</b>

    帶有Arduino核心的3D打印R2D2

    電子發(fā)燒友網(wǎng)站提供《帶有Arduino核心的3D打印R2D2.zip》資料免費(fèi)下載
    發(fā)表于 12-29 15:06 ?0次下載
    帶有Arduino核心的3<b class='flag-5'>D</b>打印<b class='flag-5'>R2D2</b>

    迷你R2D2 PCB開源分享

    電子發(fā)燒友網(wǎng)站提供《迷你R2D2 PCB開源分享.zip》資料免費(fèi)下載
    發(fā)表于 02-08 09:55 ?0次下載
    迷你<b class='flag-5'>R2D2</b> PCB開源分享

    由Alexa提供支持的樂(lè)高R2D2機(jī)器人

    電子發(fā)燒友網(wǎng)站提供《由Alexa提供支持的樂(lè)高R2D2機(jī)器人.zip》資料免費(fèi)下載
    發(fā)表于 07-06 09:18 ?0次下載
    由Alexa提供支持的樂(lè)高<b class='flag-5'>R2D2</b>機(jī)器人

    如何在Rust項(xiàng)目中使用InfluxDB 2.x

    Rust是一種系統(tǒng)編程語(yǔ)言,它具有高性能、內(nèi)存安全和并發(fā)性等特點(diǎn)。InfluxDB是一個(gè)開源的時(shí)序數(shù)據(jù)庫(kù),它專門用于存儲(chǔ)和查詢時(shí)間序列數(shù)據(jù)。InfluxDB 2.x是InfluxDB的新版本,它提供
    的頭像 發(fā)表于 09-19 16:33 ?1174次閱讀