在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

科技綠洲 ? 來(lái)源:TinyZ ? 作者:TinyZ ? 2023-09-30 16:45 ? 次閱讀

Rust 是一種系統(tǒng)級(jí)編程語(yǔ)言,具有高性能和內(nèi)存安全性。InfluxDB 是一個(gè)開(kāi)源的時(shí)間序列數(shù)據(jù)庫(kù),用于存儲(chǔ)、查詢和可視化大規(guī)模數(shù)據(jù)集。Rust 語(yǔ)言可以與 InfluxDB 集成,提供高效的數(shù)據(jù)處理和存儲(chǔ)能力。

教程將介紹 Rust 語(yǔ)言如何與 InfluxDB 集成,包括基礎(chǔ)用法和進(jìn)階用法和完整的示例代碼。

基礎(chǔ)用法

安裝 InfluxDB Rust 客戶端

首先,我們需要安裝 InfluxDB Rust 客戶端??梢栽?Cargo.toml 文件中添加以下依賴項(xiàng):

[dependencies]
influxdb = "0.14.0"

連接到 InfluxDB

我們需要?jiǎng)?chuàng)建一個(gè) InfluxDB 連接??梢允褂靡韵麓a創(chuàng)建一個(gè)連接:

use influxdb::{Client, Query};

fn main() {
    let client = Client::new("http://localhost:8086", "my_database");
}

這將創(chuàng)建一個(gè)名為“my_database”的數(shù)據(jù)庫(kù)連接。

插入數(shù)據(jù)

可以使用以下代碼將數(shù)據(jù)插入到 InfluxDB 中:

use influxdb::{Client, Query};

fn main() {
    let client = Client::new("http://localhost:8086", "my_database");

    let query = Query::write_query("my_measurement")
        .add_field("value", 42)
        .build();

    let _ = client.query(&query);
}

這將在名為“my_measurement”的測(cè)量中插入一個(gè)名為“value”的字段,該字段的值為 42。

查詢數(shù)據(jù)

可以使用以下代碼從 InfluxDB 中查詢數(shù)據(jù):

use influxdb::{Client, Query};

fn main() {
    let client = Client::new("http://localhost:8086", "my_database");

    let query = Query::raw_read_query("SELECT * FROM my_measurement");

    let result = client.query(&query);

    for row in result.unwrap().rows {
        println!("{:?}", row);
    }
}

這將從名為“my_measurement”的測(cè)量中查詢所有字段,并打印結(jié)果。

刪除數(shù)據(jù)

可以使用以下代碼從 InfluxDB 中刪除數(shù)據(jù):

use influxdb::{Client, Query};

fn main() {
    let client = Client::new("http://localhost:8086", "my_database");

    let query = Query::raw_query("DELETE FROM my_measurement WHERE time > now() - 1h");

    let _ = client.query(&query);
}

這將從名為“my_measurement”的測(cè)量中刪除 1 小時(shí)前的所有數(shù)據(jù)。

創(chuàng)建數(shù)據(jù)庫(kù)

可以使用以下代碼創(chuàng)建一個(gè)新的 InfluxDB 數(shù)據(jù)庫(kù):

use influxdb::{Client, Query};

fn main() {
    let client = Client::new("http://localhost:8086", "my_database");

    let query = Query::raw_query("CREATE DATABASE my_new_database");

    let _ = client.query(&query);
}

這將創(chuàng)建一個(gè)名為“my_new_database”的新數(shù)據(jù)庫(kù)。

刪除數(shù)據(jù)庫(kù)

可以使用以下代碼刪除一個(gè) InfluxDB 數(shù)據(jù)庫(kù):

use influxdb::{Client, Query};

fn main() {
    let client = Client::new("http://localhost:8086", "my_database");

    let query = Query::raw_query("DROP DATABASE my_database");

    let _ = client.query(&query);
}

這將刪除名為“my_database”的數(shù)據(jù)庫(kù)。

創(chuàng)建測(cè)量

可以使用以下代碼創(chuàng)建一個(gè)新的 InfluxDB 測(cè)量:

use influxdb::{Client, Query};

fn main() {
    let client = Client::new("http://localhost:8086", "my_database");

    let query = Query::raw_query("CREATE MEASUREMENT my_new_measurement");

    let _ = client.query(&query);
}

這將創(chuàng)建一個(gè)名為“my_new_measurement”的新測(cè)量。

刪除測(cè)量

可以使用以下代碼刪除一個(gè) InfluxDB 測(cè)量:

use influxdb::{Client, Query};

fn main() {
    let client = Client::new("http://localhost:8086", "my_database");

    let query = Query::raw_query("DROP MEASUREMENT my_measurement");

    let _ = client.query(&query);
}

這將刪除名為“my_measurement”的測(cè)量。

進(jìn)階用法

批量插入數(shù)據(jù)

如果需要插入大量數(shù)據(jù),可以使用以下代碼批量插入數(shù)據(jù):

use influxdb::{Client, Query, Timestamp};

fn main() {
    let client = Client::new("http://localhost:8086", "my_database");

    let mut batch = Vec::new();

    for i in 0..1000 {
        let point = Point::new("my_measurement")
            .add_field("value", i)
            .add_timestamp(Timestamp::Hours(i))
            .to_owned();

        batch.push(point);
    }

    let query = Query::write_query(&batch).build();

    let _ = client.query(&query);
}

這將在名為“my_measurement”的測(cè)量中插入 1000 個(gè)數(shù)據(jù)點(diǎn)。

使用標(biāo)簽

可以使用標(biāo)簽來(lái)組織數(shù)據(jù)。以下代碼演示如何在插入數(shù)據(jù)時(shí)使用標(biāo)簽:

use influxdb::{Client, Point, Query, Timestamp};

fn main() {
    let client = Client::new("http://localhost:8086", "my_database");

    let point = Point::new("my_measurement")
        .add_field("value", 42)
        .add_tag("region", "us-west")
        .add_tag("host", "server1")
        .add_timestamp(Timestamp::Now)
        .to_owned();

    let query = Query::write_query(&[point]).build();

    let _ = client.query(&query);
}

這將在名為“my_measurement”的測(cè)量中插入一個(gè)名為“value”的字段,以及兩個(gè)標(biāo)簽“region”和“host”。

使用時(shí)間戳

可以使用不同的時(shí)間戳格式來(lái)插入數(shù)據(jù)。以下代碼演示如何在插入數(shù)據(jù)時(shí)使用 Unix 時(shí)間戳:

use influxdb::{Client, Point, Query, Timestamp};

fn main() {
    let client = Client::new("http://localhost:8086", "my_database");

    let point = Point::new("my_measurement")
        .add_field("value", 42)
        .add_timestamp(Timestamp::Seconds(1234567890))
        .to_owned();

    let query = Query::write_query(&[point]).build();

    let _ = client.query(&query);
}

這將在名為“my_measurement”的測(cè)量中插入一個(gè)名為“value”的字段,并使用 Unix 時(shí)間戳 1234567890。

使用持續(xù)時(shí)間

可以使用持續(xù)時(shí)間來(lái)查詢數(shù)據(jù)。以下代碼演示如何查詢最近 1 小時(shí)的數(shù)據(jù):

use influxdb::{Client, Query};

fn main() {
    let client = Client::new("http://localhost:8086", "my_database");

    let query = Query::raw_read_query("SELECT * FROM my_measurement WHERE time > now() - 1h");

    let result = client.query(&query);

    for row in result.unwrap().rows {
        println!("{:?}", row);
    }
}

這將從名為“my_measurement”的測(cè)量中查詢最近 1 小時(shí)的所有數(shù)據(jù)。

使用聚合函數(shù)

可以使用聚合函數(shù)來(lái)查詢數(shù)據(jù)。以下代碼演示如何查詢最近 1 小時(shí)的平均值:

use influxdb::{Client, Query};

fn main() {
    let client = Client::new("http://localhost:8086", "my_database");

    let query = Query::raw_read_query("SELECT MEAN(value) FROM my_measurement WHERE time > now() - 1h");

    let result = client.query(&query);

    for row in result.unwrap().rows {
        println!("{:?}", row);
    }
}

這將從名為“my_measurement”的測(cè)量中查詢最近 1 小時(shí)的平均值。

使用限制

可以使用限制來(lái)查詢數(shù)據(jù)。以下代碼演示如何查詢最近 10 條數(shù)據(jù):

use influxdb::{Client, Query};

fn main() {
    let client = Client::new("http://localhost:8086", "my_database");

    let query = Query::raw_read_query("SELECT * FROM my_measurement LIMIT 10");

    let result = client.query(&query);

    for row in result.unwrap().rows {
        println!("{:?}", row);
    }
}

這將從名為“my_measurement”的測(cè)量中查詢最近 10 條數(shù)據(jù)。

使用排序

可以使用排序來(lái)查詢數(shù)據(jù)。以下代碼演示如何查詢最近 1 小時(shí)的數(shù)據(jù),并按時(shí)間戳排序:

use influxdb::{Client, Query};

fn main() {
    let client = Client::new("http://localhost:8086", "my_database");

    let query = Query::raw_read_query("SELECT * FROM my_measurement WHERE time > now() - 1h ORDER BY time");

    let result = client.query(&query);

    for row in result.unwrap().rows {
        println!("{:?}", row);
    }
}

這將從名為“my_measurement”的測(cè)量中查詢最近 1 小時(shí)的所有數(shù)據(jù),并按時(shí)間戳排序。

最佳實(shí)踐

使用連接池

為了提高性能,建議使用連接池來(lái)管理 InfluxDB 連接。以下代碼演示如何使用連接池:

use influxdb::{Client, Query, Timestamp};
use r2d2::{Pool, PooledConnection};
use r2d2_influxdb::{ConnectionManager, Error};

fn main() - > Result< (), Error > {
    let manager = ConnectionManager::new("http://localhost:8086", "my_database");
    let pool = Pool::builder().max_size(10).build(manager)?;
    let client = Client::new_with_pool(pool);

    let point = Point::new("my_measurement")
        .add_field("value", 42)
        .add_timestamp(Timestamp::Now)
        .to_owned();

    let query = Query::write_query(&[point]).build();

    let conn: PooledConnection< ConnectionManager > = client.get_conn()?;
    conn.query(&query)?;

    Ok(())
}

這將創(chuàng)建一個(gè)連接池,最大連接數(shù)為 10,并使用連接池來(lái)管理 InfluxDB 連接。

使用線程池

為了提高并發(fā)性能,建議使用線程池來(lái)處理數(shù)據(jù)插入和查詢。以下代碼演示如何使用線程池:

use influxdb::{Client, Point, Query, Timestamp};
use std::sync::Arc;
use rayon::prelude::*;

fn main() {
    let client = Arc::new(Client::new("http://localhost:8086", "my_database"));

    let points: Vec< Point > = (0..1000)
        .into_par_iter()
        .map(|i| {
            Point::new("my_measurement")
                .add_field("value", i)
                .add_timestamp(Timestamp::Hours(i))
                .to_owned()
        })
        .collect();

    points.into_par_iter().for_each(|point| {
        let query = Query::write_query(&[point]).build();
        let _ = client.query(&query);
    });
}

這將創(chuàng)建一個(gè)線程池,并使用線程池來(lái)處理 1000 個(gè)數(shù)據(jù)點(diǎn)的插入。

使用緩存

為了提高查詢性能,建議使用緩存來(lái)緩存查詢結(jié)果。以下代碼演示如何使用緩存:

use influxdb::{Client, Query};
use lru_cache::LruCache;

fn main() {
    let client = Client::new("http://localhost:8086", "my_database");
    let mut cache = LruCache::new(100);

    let query = Query::raw_read_query("SELECT * FROM my_measurement WHERE time > now() - 1h");

    let result = if let Some(result) = cache.get(&query.to_string()) {
        result
    } else {
        let result = client.query(&query).unwrap();
        cache.put(query.to_string(), result.clone());
        &result
    };

    for row in result.rows {
        println!("{:?}", row);
    }
}

這將創(chuàng)建一個(gè) LRU 緩存,最大容量為 100,并使用緩存來(lái)緩存查詢結(jié)果。

結(jié)論

本教程介紹了如何在 Rust 語(yǔ)言中使用 InfluxDB,包括基礎(chǔ)用法和進(jìn)階用法以及最佳實(shí)踐和示例代碼。希望這個(gè)教程對(duì)您有所幫助,讓您更好地使用 Rust 語(yǔ)言和 InfluxDB。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)投訴
  • 編程語(yǔ)言
    +關(guān)注

    關(guān)注

    10

    文章

    1955

    瀏覽量

    36213
  • 開(kāi)源
    +關(guān)注

    關(guān)注

    3

    文章

    3624

    瀏覽量

    43542
  • 數(shù)據(jù)處理
    +關(guān)注

    關(guān)注

    0

    文章

    626

    瀏覽量

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

    關(guān)注

    0

    文章

    57

    瀏覽量

    3122
收藏 人收藏

    評(píng)論

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

    聊聊Rust與C語(yǔ)言交互的具體步驟

    rust FFI 是rust與其他語(yǔ)言互調(diào)的橋梁,通過(guò)FFI rust 可以有效繼承 C 語(yǔ)言的歷史資產(chǎn)。本期通過(guò)幾個(gè)例子來(lái)聊聊
    發(fā)表于 07-06 11:15 ?2038次閱讀

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

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

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

    Rust語(yǔ)言是一種系統(tǒng)級(jí)編程語(yǔ)言,具有高性能、安全、并發(fā)等特點(diǎn),是近年來(lái)備受關(guān)注的新興編程語(yǔ)言。在Rust
    的頭像 發(fā)表于 09-19 16:02 ?1760次閱讀

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

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

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

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

    在Aurix Tc375Lk上使用Rust編程語(yǔ)言可以嗎?

    您好,如果我想在 Aurix Tc375Lk 上使用 Rust 編程語(yǔ)言,可以嗎?如果是,鏈接 rust 編譯器 ADS 和 freetoolchain 的步驟是什么?你有在 ADS 或 freetoolchian 中鏈接編譯器
    發(fā)表于 05-17 13:42

    如何用 rust 語(yǔ)言開(kāi)發(fā) stm32

    本文介紹如何用 rust 語(yǔ)言開(kāi)發(fā) stm32。開(kāi)發(fā)平臺(tái)為 linux(gentoo)。硬件準(zhǔn)備本文使用的芯片為 STM32F103C8T6。該芯片性價(jià)比較高,價(jià)格低廉,適合入門學(xué)習(xí)。需要
    發(fā)表于 11-26 06:20

    RUST在嵌入式開(kāi)發(fā)中的應(yīng)用是什么

    Rust是一種編程語(yǔ)言,它使用戶能夠構(gòu)建可靠、高效的軟件,尤其是用于嵌入式開(kāi)發(fā)的軟件。它的特點(diǎn)是:高性能:Rust具有驚人的速度和高內(nèi)存利用率。可靠性:在編譯過(guò)程中可以消除內(nèi)存錯(cuò)誤。生產(chǎn)效率:優(yōu)秀
    發(fā)表于 12-24 08:34

    如何利用C語(yǔ)言去調(diào)用rust靜態(tài)庫(kù)呢

    語(yǔ)言的感覺(jué),要做不少的對(duì)接工作。也用過(guò)Lua,感覺(jué)也差不多。評(píng)估學(xué)習(xí)評(píng)估Rust語(yǔ)言時(shí),感覺(jué)性能和體積應(yīng)該都不會(huì)有太大的問(wèn)題。加上語(yǔ)言本身主打的安全性,再結(jié)合一些庫(kù),用來(lái)做一些C
    發(fā)表于 06-21 10:27

    微軟正在研發(fā)基于Rust新的安全編程語(yǔ)言

    為提高 Windows 10 的安全性,微軟研究人員 Matthew Parkinson 在本周的一次演講中披露:微軟正基于 Rust 開(kāi)發(fā)新的安全編程語(yǔ)言。
    的頭像 發(fā)表于 12-06 16:36 ?3411次閱讀

    influxdb+grafana+nodemcu

    電力計(jì)量——NodeMCU+Influxdb+Grafana主要由一下幾個(gè)部分構(gòu)成:-數(shù)據(jù)庫(kù):Influxdb——開(kāi)源的時(shí)序數(shù)據(jù)庫(kù) -前端:Grafana——開(kāi)源的圖表展示 -數(shù)據(jù)采集
    發(fā)表于 12-17 18:01 ?8次下載
    <b class='flag-5'>influxdb</b>+grafana+nodemcu

    Rust語(yǔ)言助力Android內(nèi)存安全漏洞大幅減少

    ,而是在新編寫(xiě)的代碼中使用 Rust 語(yǔ)言開(kāi)發(fā)。 通過(guò)將越來(lái)越多的 Rust 代碼集成到其 Android 操作系統(tǒng)中,Google 在減少漏洞方面的努力最終是獲得了回報(bào)。 Googl
    發(fā)表于 12-06 17:56 ?760次閱讀

    適合嵌入式設(shè)備開(kāi)發(fā)的編程語(yǔ)言Rust語(yǔ)言

    Rust語(yǔ)言是二十一世紀(jì)的語(yǔ)言新星。Rust被人廣泛承認(rèn)的一點(diǎn),就是因?yàn)樗苓\(yùn)行在多樣的目標(biāo)上,從桌面和服務(wù)器設(shè)備,到資源有限的嵌入式設(shè)備。
    發(fā)表于 09-12 09:39 ?3674次閱讀
    適合嵌入式設(shè)備開(kāi)發(fā)的編程<b class='flag-5'>語(yǔ)言</b>—<b class='flag-5'>Rust</b><b class='flag-5'>語(yǔ)言</b>

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

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

    基于Rust開(kāi)發(fā)的編程語(yǔ)言

    Move 是一門由 Rust 語(yǔ)言開(kāi)發(fā)的一門面向資產(chǎn)的編程語(yǔ)言,最早由 Facebook (現(xiàn) Meta )投入大量的人力物力開(kāi)發(fā),用于 Libra (現(xiàn) Dime )項(xiàng)目,處理全球性大規(guī)模支付系統(tǒng)的編程
    的頭像 發(fā)表于 11-17 12:30 ?900次閱讀
    主站蜘蛛池模板: 日本三级免费看 | 午夜一级毛片不卡 | 女女同免费播放毛片 | 国内露脸夫妇交换精品 | 四虎8848精品永久在线观看 | 国产精品视频色拍拍 | 中文字幕在线一区二区三区 | 亚洲国产色婷婷精品综合在线观看 | 久久草在线视频国产一 | 中文字幕亚洲天堂 | 亚洲综合一区二区三区 | 狠狠色噜噜狠狠狠狠狠色综合久久 | 精品久久久久久久久久 | 欧美又粗又硬又大久久久 | 五月天婷婷社区 | 免费看一级特黄a大片 | 婷婷色站 | 欧美美女一区二区三区 | 黑色丝袜美女被视频网站 | 国产亚洲卡二卡3卡4卡乱码 | 久久刺激视频 | 日本精品视频 | 三级视频网站在线观看 | 手机看片日韩国产 | 美女视频黄视大全视频免费网址 | 一级欧美日韩 | 亚洲欧洲色天使日韩精品 | 性色在线观看 | 69日本xxxxxxxxx56| 美女视频网站色软件免费视频 | 手机国产看片 | 欧美激情二区三区 | 亚洲综合色就色手机在线观看 | 最新国产精品视频免费看 | 午夜黄视频| 欧美综合在线视频 | 在线免费影视 | 最好看免费中文字幕2018视频 | 色妞色综合久久夜夜 | 日本加勒比视频在线观看 | 精品黄色录像 |