精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

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

如何在Rust項目中使用InfluxDB 2.x

科技綠洲 ? 來源:TinyZ ? 作者:TinyZ ? 2023-09-19 16:33 ? 次閱讀

Rust是一種系統(tǒng)編程語言,它具有高性能、內(nèi)存安全和并發(fā)性等特點。InfluxDB是一個開源的時序數(shù)據(jù)庫,它專門用于存儲和查詢時間序列數(shù)據(jù)。InfluxDB 2.x是InfluxDB的新版本,它提供了更好的性能和更好的用戶體驗。Rust語言提供了InfluxDB 2.x的官方客戶端庫,可以方便地在Rust項目中使用InfluxDB 2.x。

教程將介紹如何在Rust項目中使用InfluxDB 2.x,包括基礎(chǔ)用法和進(jìn)階用法。我們將提供示例代碼,幫助讀者更好地理解和使用InfluxDB 2.x。

InfluxDB 2.x版本重寫了查詢系統(tǒng), 引入了全新的Flux語言查詢。相比于SQL,個人感覺是一種退步。詳細(xì)的Flux語法參考官方文檔。

基礎(chǔ)用法

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

在使用InfluxDB 2.x之前,需要先創(chuàng)建一個數(shù)據(jù)庫??梢允褂肐nfluxDB 2.x的Web界面或命令行工具來創(chuàng)建數(shù)據(jù)庫。在本教程中,我們將使用命令行工具來創(chuàng)建數(shù)據(jù)庫。

use influxdb2::Client;
use influxdb2::models::CreateDatabaseRequest;

fn main() {
    let client = Client::new("http://localhost:8086", "my-token");
    let db_name = "my-db";
    let request = CreateDatabaseRequest::new(db_name);
    client.create_database(request).unwrap();
}

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

寫入數(shù)據(jù)是InfluxDB 2.x的主要功能之一。可以使用InfluxDB 2.x的客戶端庫來寫入數(shù)據(jù)。在寫入數(shù)據(jù)之前,需要先創(chuàng)建一個Bucket。

use influxdb2::Client;
use influxdb2::models::{CreateBucketRequest, WritePrecision, Point, FieldValue};

fn main() {
    let client = Client::new("http://localhost:8086", "my-token");
    let bucket_name = "my-bucket";
    let org_id = "my-org";
    let request = CreateBucketRequest::new(bucket_name, org_id);
    client.create_bucket(request).unwrap();

    let point = Point::new("my-measurement")
        .add_field("my-field", FieldValue::Integer(1))
        .add_tag("my-tag", "my-value")
        .timestamp(1626464400000, WritePrecision::Ms);
    let points = vec![point];
    client.write_points(bucket_name, points).unwrap();
}

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

查詢數(shù)據(jù)是InfluxDB 2.x的另一個主要功能??梢允褂肐nfluxDB 2.x的客戶端庫來查詢數(shù)據(jù)。在查詢數(shù)據(jù)之前,需要先創(chuàng)建一個查詢語句。

use influxdb2::Client;
use influxdb2::models::{QueryRequest, Query, QueryType};

fn main() {
    let client = Client::new("http://localhost:8086", "my-token");
    let query = Query::new("SELECT * FROM my-measurement");
    let request = QueryRequest::new(query, QueryType::Flux);
    let result = client.query(request).unwrap();
    println!("{:?}", result);
}

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

刪除數(shù)據(jù)是InfluxDB 2.x的另一個功能??梢允褂肐nfluxDB 2.x的客戶端庫來刪除數(shù)據(jù)。在刪除數(shù)據(jù)之前,需要先創(chuàng)建一個刪除語句。

use influxdb2::Client;
use influxdb2::models::{DeleteRequest, Predicate};

fn main() {
    let client = Client::new("http://localhost:8086", "my-token");
    let predicate = Predicate::new("my-tag", "my-value");
    let request = DeleteRequest::new("my-measurement", predicate);
    client.delete(request).unwrap();
}

創(chuàng)建用戶

在使用InfluxDB 2.x之前,需要先創(chuàng)建一個用戶。可以使用InfluxDB 2.x的Web界面或命令行工具來創(chuàng)建用戶。在本教程中,我們將使用命令行工具來創(chuàng)建用戶。

use influxdb2::Client;
use influxdb2::models::{CreateUserRequest, UserPermission};

fn main() {
    let client = Client::new("http://localhost:8086", "my-token");
    let username = "my-user";
    let password = "my-password";
    let request = CreateUserRequest::new(username, password);
    client.create_user(request).unwrap();

    let permission = UserPermission::new("my-bucket", "read");
    client.add_permission(username, permission).unwrap();
}

創(chuàng)建授權(quán)令牌

在使用InfluxDB 2.x之前,需要先創(chuàng)建一個授權(quán)令牌。可以使用InfluxDB 2.x的Web界面或命令行工具來創(chuàng)建授權(quán)令牌。在本教程中,我們將使用命令行工具來創(chuàng)建授權(quán)令牌。

use influxdb2::Client;
use influxdb2::models::{CreateTokenRequest, Permission};

fn main() {
    let client = Client::new("http://localhost:8086", "my-token");
    let request = CreateTokenRequest::new(vec![Permission::new("my-bucket", "read")]);
    let result = client.create_token(request).unwrap();
    println!("{:?}", result);
}

創(chuàng)建任務(wù)

在InfluxDB 2.x中,任務(wù)是一種自動化的操作。可以使用InfluxDB 2.x的Web界面或命令行工具來創(chuàng)建任務(wù)。在本教程中,我們將使用命令行工具來創(chuàng)建任務(wù)。

use influxdb2::Client;
use influxdb2::models::{CreateTaskRequest, Cron};

fn main() {
    let client = Client::new("http://localhost:8086", "my-token");
    let query = "SELECT * FROM my-measurement";
    let cron = Cron::new("0 * * * * * *");
    let request = CreateTaskRequest::new("my-task", query, cron);
    client.create_task(request).unwrap();
}

進(jìn)階用法

使用Flux查詢語言

Flux是InfluxDB 2.x的查詢語言,它提供了更強(qiáng)大的查詢功能??梢允褂肐nfluxDB 2.x的客戶端庫來查詢Flux語句。

use influxdb2::Client;
use influxdb2::models::{QueryRequest, Query, QueryType};

fn main() {
    let client = Client::new("http://localhost:8086", "my-token");
    let query = Query::new("from(bucket:"my-bucket") | > range(start: -1h) | > filter(fn: (r) = > r._measurement == "my-measurement") | > limit(n: 10)");
    let request = QueryRequest::new(query, QueryType::Flux);
    let result = client.query(request).unwrap();
    println!("{:?}", result);
}

使用Task API創(chuàng)建任務(wù)

可以使用Task API來創(chuàng)建任務(wù),這樣可以更方便地管理任務(wù)??梢允褂肐nfluxDB 2.x的客戶端庫來創(chuàng)建任務(wù)。

use influxdb2::Client;
use influxdb2::models::{CreateTaskRequest, Cron, TaskStatus};

fn main() {
    let client = Client::new("http://localhost:8086", "my-token");
    let query = "SELECT * FROM my-measurement";
    let cron = Cron::new("0 * * * * * *");
    let request = CreateTaskRequest::new("my-task", query, cron);
    client.create_task(request).unwrap();

    let status = TaskStatus::Inactive;
    client.update_task_status("my-task", status).unwrap();
}

使用Write API批量寫入數(shù)據(jù)

可以使用Write API來批量寫入數(shù)據(jù),這樣可以提高寫入數(shù)據(jù)的效率。可以使用InfluxDB 2.x的客戶端庫來批量寫入數(shù)據(jù)。

use influxdb2::Client;
use influxdb2::models::{WriteRequest, WritePrecision, Point, FieldValue};

fn main() {
    let client = Client::new("http://localhost:8086", "my-token");
    let bucket_name = "my-bucket";
    let point1 = Point::new("my-measurement")
        .add_field("my-field", FieldValue::Integer(1))
        .add_tag("my-tag", "my-value")
        .timestamp(1626464400000, WritePrecision::Ms);
    let point2 = Point::new("my-measurement")
        .add_field("my-field", FieldValue::Integer(2))
        .add_tag("my-tag", "my-value")
        .timestamp(1626464401000, WritePrecision::Ms);
    let points = vec![point1, point2];
    let request = WriteRequest::new(points);
    client.write(request).unwrap();
}

使用Query API查詢數(shù)據(jù)

可以使用Query API來查詢數(shù)據(jù),這樣可以更方便地查詢數(shù)據(jù)??梢允褂肐nfluxDB 2.x的客戶端庫來查詢數(shù)據(jù)。

use influxdb2::Client;
use influxdb2::models::{QueryRequest, Query, QueryType};

fn main() {
    let client = Client::new("http://localhost:8086", "my-token");
    let query = Query::new("from(bucket:"my-bucket") | > range(start: -1h) | > filter(fn: (r) = > r._measurement == "my-measurement") | > limit(n: 10)");
    let request = QueryRequest::new(query, QueryType::Flux);
    let result = client.query(request).unwrap();
    println!("{:?}", result);
}

最佳實踐

使用環(huán)境變量存儲認(rèn)證信息

在實際應(yīng)用中,通常不會將認(rèn)證信息硬編碼到代碼中??梢允褂铆h(huán)境變量來存儲認(rèn)證信息,這樣可以更安全地管理認(rèn)證信息。

use influxdb2::Client;
use influxdb2::models::CreateDatabaseRequest;
use std::env;

fn main() {
    let url = env::var("INFLUXDB_URL").unwrap();
    let token = env::var("INFLUXDB_TOKEN").unwrap();
    let client = Client::new(&url, &token);

    let db_name = "my-db";
    let request = CreateDatabaseRequest::new(db_name);
    client.create_database(request).unwrap();
}

使用Rust的異步編程模型

在實際應(yīng)用中,通常需要處理大量的數(shù)據(jù)??梢允褂肦ust的異步編程模型來提高數(shù)據(jù)處理的效率。

use influxdb2::Client;
use influxdb2::models::{WriteRequest, WritePrecision, Point, FieldValue};
use futures::executor::block_on;

async fn write_data(client: &Client) {
    let bucket_name = "my-bucket";
    let point1 = Point::new("my-measurement")
        .add_field("my-field", FieldValue::Integer(1))
        .add_tag("my-tag", "my-value")
        .timestamp(1626464400000, WritePrecision::Ms);
    let point2 = Point::new("my-measurement")
        .add_field("my-field", FieldValue::Integer(2))
        .add_tag("my-tag", "my-value")
        .timestamp(1626464401000, WritePrecision::Ms);
    let points = vec![point1, point2];
    let request = WriteRequest::new(points);
    client.write(request).await.unwrap();
}

fn main() {
    let url = "http://localhost:8086";
    let token = "my-token";
    let client = Client::new(url, token);

    let future = write_data(&client);
    block_on(future);
}

使用連接池提高效率

在實際應(yīng)用中,通常需要處理大量的請求??梢允褂眠B接池來提高請求處理的效率。

use influxdb2::Client;
use influxdb2::models::CreateDatabaseRequest;
use r2d2::Pool;
use r2d2_influxdb2::InfluxDB2ConnectionManager;

fn main() {
    let url = "http://localhost:8086";
    let token = "my-token";
    let manager = InfluxDB2ConnectionManager::new(url, token);
    let pool = Pool::builder().max_size(10).build(manager).unwrap();
    let client = Client::new(pool);

    let db_name = "my-db";
    let request = CreateDatabaseRequest::new(db_name);
    client.create_database(request).unwrap();
}

結(jié)論

本教程介紹了如何在Rust項目中使用InfluxDB 2.x,包括基礎(chǔ)用法和進(jìn)階用法。我們提供了示例代碼,幫助讀者更好地理解和使用InfluxDB 2.x。最后,我們提供了一些最佳實踐,幫助讀者更好地使用InfluxDB 2.x。

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

    關(guān)注

    7

    文章

    3767

    瀏覽量

    64283
  • 編程語言
    +關(guān)注

    關(guān)注

    10

    文章

    1939

    瀏覽量

    34608
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4753

    瀏覽量

    68368
  • Rust
    +關(guān)注

    關(guān)注

    1

    文章

    228

    瀏覽量

    6574
收藏 人收藏

    評論

    相關(guān)推薦

    何在基于Raspberry Pi的項目中使用霍爾傳感器

    汽車行業(yè)產(chǎn)品中的速度、位置和距離。霍爾傳感器的多功能性使其成為制造商和電氣工程師的必備品,這就是為什么今天,我將向我們展示如何在基于 Raspberry Pi 的項目中使用霍爾傳感器。
    的頭像 發(fā)表于 11-16 17:16 ?2429次閱讀
    如<b class='flag-5'>何在</b>基于Raspberry Pi的<b class='flag-5'>項目中使</b>用霍爾傳感器

    何在Rust中使用Memcached

    Memcached協(xié)議的實現(xiàn),使得開發(fā)者可以在Rust中使用Memcached。 基礎(chǔ)用法 創(chuàng)建連接 使用Rust語言Memcached需要先創(chuàng)建一個連接。可以使用 memcached::Client
    的頭像 發(fā)表于 09-19 16:30 ?1204次閱讀

    Rust語言如何與 InfluxDB 集成

    Rust 是一種系統(tǒng)級編程語言,具有高性能和內(nèi)存安全性。InfluxDB 是一個開源的時間序列數(shù)據(jù)庫,用于存儲、查詢和可視化大規(guī)模數(shù)據(jù)集。Rust 語言可以與 InfluxDB 集成,
    的頭像 發(fā)表于 09-30 16:45 ?1111次閱讀

    何在XPS項目中使用SmartXplorer

    您好Xilinx社區(qū),我對使用SmartXplorer方法試圖改善設(shè)計時間感興趣。我似乎能夠在命令行工具上找到大量信息,并且我了解如何從命令行運行程序等。但是,我似乎無法找到的是如何在XPS項目中使
    發(fā)表于 10-17 14:14

    在一個項目中使用多個.cysch文件?

    我正在研究一個有幾個人的項目,但是單一的TopDebug .CysCH文件對于版本控制(Git)來說是非常有問題的。我想弄清楚如何在一個項目中使用多個.CysCH文件。我意識到您可以在一個單一
    發(fā)表于 09-23 08:38

    何在我的項目中使用停止模式?

    你好,我想在我的項目中使用停止模式。有什么例子嗎?我想讓我的外圍模塊在初始化時停止模式。如果用戶將喚醒按鈕,模塊醒來并開始廣告。模塊進(jìn)入停止模式,再然后preconfiguredtimeout已過期。
    發(fā)表于 09-25 14:58

    如何從MLA到我的項目中獲得代碼

    如何從MLA到我的項目中獲得代碼。我可以看到MIWI的功能,但如何在我的項目中使用它們呢?
    發(fā)表于 05-07 12:01

    項目中使用SYSBIOS有好處嗎?

    我找了下ControlSuite發(fā)現(xiàn)沒有相應(yīng)的例程,尤其是驅(qū)動部分,另外在項目中使用SYSBIOS有好處嗎?
    發(fā)表于 06-01 06:49

    何在固件中使用內(nèi)嵌的SPI RAM呢?

    我有一個 ESP32-S3-WROOM1 模塊,其中包含一個內(nèi)部 SPI 2Mo RAM。我在 Eclipse 下開始了一個新項目,但我不知道如何在我的項目中聲明
    發(fā)表于 03-01 06:37

    何在ESP-IDF項目中使用BSON ?

    組件。我需要按塊從相機(jī)發(fā)送照片,所以我需要將每個塊都以二進(jìn)制格式放置。在 ESP-IDF 項目中使用 BSON 有什么想法嗎?
    發(fā)表于 04-14 06:59

    將STM32F2/F4設(shè)備系列包1.x遷移到2.x應(yīng)用說明

    Keil Middleware版本6.0依賴于CMSIS驅(qū)動程序API 2.0。 您需要升級到STM32F2或F4 Device Family Pack(DFPS)版本2.x或更高版本。 這些DFP
    發(fā)表于 09-04 07:33

    TinyOs 2.x的電源管理策略及程序移植

    TinyOs 2.x的電源管理策略及程序移植 摘要:本文針對WSN的操作系統(tǒng)TinyOs,從結(jié)構(gòu)、電源管理以及系統(tǒng)構(gòu)成方面對2.x下的實現(xiàn)進(jìn)行分析,并與1.x作了對比,給出了
    發(fā)表于 05-23 15:36 ?22次下載

    何在Python中使用MQTT

    本文主要介紹如何在 Python 項目中使用?paho-mqtt?客戶端庫 ,實現(xiàn)客戶端與?MQTT?服務(wù)器的連接、訂閱、取消訂閱、收發(fā)消息等功能。
    的頭像 發(fā)表于 12-22 10:41 ?9629次閱讀
    如<b class='flag-5'>何在</b>Python<b class='flag-5'>中使</b>用MQTT

    何在Arduino中使用20x4 I2C字符LCD顯示器

    電子發(fā)燒友網(wǎng)站提供《如何在Arduino中使用20x4 I2C字符LCD顯示器.zip》資料免費下載
    發(fā)表于 06-28 15:57 ?0次下載
    如<b class='flag-5'>何在</b>Arduino<b class='flag-5'>中使</b>用20<b class='flag-5'>x</b>4 I<b class='flag-5'>2</b>C字符LCD顯示器

    DiSEqC? 2.x濾波器優(yōu)化

    電子發(fā)燒友網(wǎng)站提供《DiSEqC? 2.x濾波器優(yōu)化.pdf》資料免費下載
    發(fā)表于 09-24 10:41 ?0次下載
    DiSEqC? <b class='flag-5'>2.x</b>濾波器優(yōu)化