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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

從WasmEdge運行環境讀寫Rust Wasm應用的時序數據

jf_wN0SrCdH ? 來源:Rust語言中文社區 ? 2023-12-22 11:03 ? 次閱讀

WebAssembly (Wasm) 正在成為一個廣受歡迎的編譯目標,幫助開發者構建可遷移平臺的應用。最近 Greptime 和 WasmEdge 協作,支持了在 WasmEdge 平臺上的 Wasm 應用通過 MySQL 協議讀寫 GreptimeDB 中的時序數據。

什么是 WebAssembly

WebAssembly 是一種新的指令格式,同時具備了跨平臺和接近原生機器代碼的執行速度。通過將 C/C++ 或 Rust 代碼編譯成 WebAssembly ,可以在瀏覽器中提升程序的性能。而在瀏覽器外的其他運行環境,尤其是 CDN 或 IoT 的邊緣端,我們也可以利用 WebAssembly 實現沙盒、動態加載的插件機制等高級的功能。

什么是 WasmEdge

WasmEdge 是 CNCF 的沙箱項目,提供上文提到的沙盒能力,允許開發者在 WebAssembly 標準的基礎上,進一步擴展其能訪問的資源和接口。例如,WasmEdge 為 Wasm 提供了額外的 TLS、網絡能力和 AI 能力,大大豐富了使用場景。

WasmEdge GitHub 地址:

https://github.com/WasmEdge/WasmEdge

安裝 GreptimeDB 和 WasmEdge

如果你已經安裝了 GreptimeDB ,可以跳過這個步驟。

下載 GreptimeDB 并運行:

curl-Lhttps://github.com/GreptimeTeam/greptimedb/raw/develop/scripts/install.sh|sh
./greptimestandalonestart

安裝 WasmEdge:

curl-sSfhttps://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install.sh|bash-s

編寫 GreptimeDB 的 WASM 應用

在 WasmEdge 中,我們可以使用 MySQL 協議,讓 Rust 語言編寫的應用程序連接到 GreptimeDB。

首先通過cargo new創建一個新的 Rust 項目,我們的編譯目標將是wasm32-wasi,可以在項目根目錄下創建.cargo/config.toml文件,指定默認編譯目標,之后就無需在每次cargo build命令后專門指定--target了。

#.cargo/config.toml
[build]
target="wasm32-wasi"

編輯Cargo.toml增加依賴。mysql_async的應用需要tokio運行時,WasmEdge 維護了這兩個庫的修改版本,使他們能夠編譯成 WebAssembly 代碼,并且運行到 WasmEdge 環境中。

[package]
name="greptimedb"
version="0.1.0"
edition="2021"

[dependencies]
mysql_async_wasi="0.31"
time="0.3"
tokio_wasi={version="1",features=["io-util","fs","net","time","rt","macros"]}

進一步編輯src/main.rs文件,加入數據庫訪問的邏輯。這段代碼將演示:

通過環境變量讀取數據庫地址,并創建連接池;

執行 SQL 語句創建數據表;

插入數據;

查詢數據。

定義數據結構:

#[derive(Debug)]
structCpuMetric{
hostname:String,
environment:String,
usage_user:f64,
usage_system:f64,
usage_idle:f64,
ts:i64,
}

implCpuMetric{
fnnew(
hostname:String,
environment:String,
usage_user:f64,
usage_system:f64,
usage_idle:f64,
ts:i64,
)->Self{
Self{
hostname,
environment,
usage_user,
usage_system,
usage_idle,
ts,
}
}

}

初始化數據庫連接池:

usemysql_async::{
prelude::*,Opts,OptsBuilder,Pool,PoolConstraints,PoolOpts,Result,
};
usetime::PrimitiveDateTime;

fnget_url()->String{
ifletOk(url)=std::var("DATABASE_URL"){
letopts=Opts::from_url(&url).expect("DATABASE_URLinvalid");
ifopts
.db_name()
.expect("adatabasenameisrequired")
.is_empty()
{
panic!("databasenameisempty");
}
url
}else{
"mysql://root:pass@127.0.0.1:3306/mysql".into()
}
}


#[tokio::main(flavor="current_thread")]
asyncfnmain()->Result<()>{
//Alternative:The"easy"waywithadefaultconnectionpool
//letpool=Pool::from_url(&*get_url()).unwrap());
//letmutconn=pool.get_conn().await.unwrap();

//Belowwecreateacustomizedconnectionpool
letopts=Opts::from_url(&*get_url()).unwrap();
letbuilder=OptsBuilder::from_opts(opts);
//Theconnectionpoolwillhaveaminof1andmaxof2connections.
letconstraints=PoolConstraints::new(1,2).unwrap();
letpool_opts=PoolOpts::default().with_constraints(constraints);

letpool=Pool::new(builder.pool_opts(pool_opts));
letmutconn=pool.get_conn().await.unwrap();



Ok(())
}

創建數據表:

//Createtableifnotexists
r"CREATETABLEIFNOTEXISTSwasmedge_example_cpu_metrics(
hostnameSTRING,
environmentSTRING,
usage_userDOUBLE,
usage_systemDOUBLE,
usage_idleDOUBLE,
tsTIMESTAMP,
TIMEINDEX(ts),
PRIMARYKEY(hostname,environment)
);"
.ignore(&mutconn)
.await?;

插入數據:

 letmetrics=vec![
CpuMetric::new(
"host0".into(),
"test".into(),
32f64,
3f64,
4f64,
1680307200050,
),
CpuMetric::new(
"host1".into(),
"test".into(),
29f64,
32f64,
50f64,
1680307200050,
),
CpuMetric::new(
"host0".into(),
"test".into(),
32f64,
3f64,
4f64,
1680307260050,
),
CpuMetric::new(
"host1".into(),
"test".into(),
29f64,
32f64,
50f64,
1680307260050,
),
CpuMetric::new(
"host0".into(),
"test".into(),
32f64,
3f64,
4f64,
1680307320050,
),
CpuMetric::new(
"host1".into(),
"test".into(),
29f64,
32f64,
50f64,
1680307320050,
),
];

r"INSERTINTOwasmedge_example_cpu_metrics(hostname,environment,usage_user,usage_system,usage_idle,ts)
VALUES(:hostname,:environment,:usage_user,:usage_system,:usage_idle,:ts)"
.with(metrics.iter().map(|metric|{
params!{
"hostname"=>&metric.hostname,
"environment"=>&metric.environment,
"usage_user"=>metric.usage_user,
"usage_system"=>metric.usage_system,
"usage_idle"=>metric.usage_idle,
"ts"=>metric.ts,
}
}))
.batch(&mutconn)

.await?;

查詢數據:

letloaded_metrics="SELECT*FROMwasmedge_example_cpu_metrics"
.with(())
.map(
&mutconn,
|(hostname,environment,usage_user,usage_system,usage_idle,raw_ts):(
String,
String,
f64,
f64,
f64,
PrimitiveDateTime,
)|{
letts=raw_ts.assume_utc().unix_timestamp()*1000;
CpuMetric::new(
hostname,
environment,
usage_user,
usage_system,
usage_idle,
ts,
)
},
)
.await?;

println!("{:?}",loaded_metrics);

WasmEdge 團隊提供的tokio和mysql_async庫與原始版本編程接口完全一致,因此可以無縫地將普通 Rust 應用切換到 WebAssembly 平臺上。

編譯這個項目,我們可以獲得 greptimedb.wasm 文件:

cargobuild
ls-lhtarget/wasm32-wasi/debug/greptimedb.wasm

通過 WasmEdge 運行我們的程序:

wasmedge--env"DATABASE_URL=mysql://localhost:4002/public"target/wasm32-wasi/debug/greptimedb.wasm

上面這段示例程序已經納入了 WasmEdge 的數據庫使用示例,你可以在 GitHub 倉庫找到完整的代碼:

https://github.com/WasmEdge/wasmedge-db-examples/tree/main/greptimedb。

總結

WasmEdge 為 WebAssembly 應用提供了更多的擴展能力。如果你也將應用部署在 WebAssembly 環境里,未來我們還可以使用 OpenTelemetry SDK 采集指標數據直接存儲到 GreptimeDB 。現在就下載 GreptimeDB 或開通 GreptimeCloud 實例運行上面的例子吧。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 時序
    +關注

    關注

    5

    文章

    392

    瀏覽量

    37428
  • MySQL
    +關注

    關注

    1

    文章

    829

    瀏覽量

    26743
  • 編譯
    +關注

    關注

    0

    文章

    661

    瀏覽量

    33041
  • GitHub
    +關注

    關注

    3

    文章

    473

    瀏覽量

    16564
  • Rust
    +關注

    關注

    1

    文章

    230

    瀏覽量

    6665

原文標題:從 WasmEdge 運行環境讀寫 Rust Wasm 應用的時序數據

文章出處:【微信號:Rust語言中文社區,微信公眾號:Rust語言中文社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何在Rust讀寫文件

    見的內存安全問題和數據競爭問題。 在Rust中,讀寫文件是一項非常常見的任務。本教程將介紹如何在Rust讀寫文件,包括基礎用法和進階用法。
    的頭像 發表于 09-20 10:57 ?2123次閱讀

    時序數據庫HiTSDB的深度解析!

    深度解讀!時序數據庫HiTSDB:分布式流式聚合引擎
    發表于 07-22 13:22

    多片段時序數據建模預測實踐資料分享

    時序數據建模分析已經有很多相關的應用了,在這個領域里面LSTM網絡絕對是占據著非常重要的作用,自從LSTM網絡提出以來,陸陸續續又出現了很多相關的變種網絡,傳統的時序建模工作主要是基于一個指定的時序數據
    發表于 06-30 07:52

    關于時序數據庫的內容

    簡介: 這是一篇無法一口氣讀完的、文字過萬[正文字數14390]的長文,這是一個無法中途不上廁所就看完的、關于時序數據庫的視頻[時長111分鐘]分享的文字整理..大家好,很開心能夠和大家一起交流時序數據
    發表于 07-12 08:00

    什么是時序數據庫?

    數據庫(TSDB)是一個為了用于處理時間序列數據而優化的軟件系統,其按時間數值或時間范圍進行索引。時序數據庫增長趨勢時序數據2014年開
    發表于 07-12 08:35

    Wasm軟件生態系統安全分析

    ,如C、C++、Rust、Go、Java、C#等幾乎所有主流高級語言都可以被編譯到Wasm,所有的主流瀏覽器也均支持Wasm。此外業界也實現了很多獨立的Wasm虛擬機(
    發表于 09-05 15:29

    TableStore時序數據存儲 - 架構篇

    摘要:?背景 隨著近幾年物聯網的發展,時序數據迎來了一個不小的爆發。DB-Engines上近兩年的數據庫類型增長趨勢來看,時序數據庫的增長是非常迅猛的。在去年我花了比較長的時間去了解
    發表于 08-08 16:17 ?617次閱讀
    TableStore<b class='flag-5'>時序數據</b>存儲 - 架構篇

    時序數據庫的前世今生

    的頻頻發聲,正說明各家企業已經迫不及待的擁抱物聯網時代的到來。 本文會時序數據庫的基本概念、應用場景、需求與能力等方面一一展開,帶你了解時序數據庫的前世今生。 01 應用場景 時序數據
    的頭像 發表于 12-17 17:51 ?3662次閱讀

    華為時序數據庫為智慧健康養老行業貢獻應用之道

    隨著 IoT 技術的快速發展,物聯網設備產生的數據呈爆炸式增長。這些數據通常隨時間產生,稱之為時序數據。這樣的一種專門用于管理時序數據數據
    的頭像 發表于 11-07 15:10 ?5975次閱讀

    華為PB級時序數據庫Gauss DB,助力海量數據處理

    ??近年來,時序數據的應用更為廣泛,包括物聯網、金融領域、監控領域、醫學領域、農業生產領域等各方面,都在大量使用時序數據,通過數據來研究對象的趨勢性、規律性、異常性;并且在 5G 與人工智能的浪潮下
    的頭像 發表于 10-15 19:15 ?1174次閱讀
    華為PB級<b class='flag-5'>時序數據</b>庫Gauss DB,助力海量<b class='flag-5'>數據</b>處理

    WasmEdge增加了Tokio支持

    WasmEdge 成功地移植了 tokio(一個 Rust 異步運行時)到 Wasm:https://github.com/WasmEdge
    的頭像 發表于 12-05 11:55 ?890次閱讀

    物聯網場景海量時序數據存儲與處理的關鍵技術

    時序數據是隨時間不斷產生的一系列數據,例如持續監控的氣象變化數據、股市交易記錄、應用監控數據等,通常一個時序數據點可以由
    發表于 12-27 11:58 ?2413次閱讀

    涂鴉推出NekoDB時序數據庫,助力全球客戶實現低成本部署

    隨著IoT技術逐漸成熟,眾多設備產出的數據呈現指數級增長。企業亟需用行之有效的方式管理海量時序數據。由此,各類時序數據庫開始成為市場寵兒。與市場需求相悖的是,時序數據庫水平參差不齊。縱
    的頭像 發表于 07-24 10:08 ?2127次閱讀
    涂鴉推出NekoDB<b class='flag-5'>時序數據</b>庫,助力全球客戶實現低成本部署

    什么是wasm組件?使用Rust開發wasm組件實戰

    wasm 全稱 WebAssembly,是通過虛擬機的方式,可以在服務端、客戶端如瀏覽器等環境執行的二進制程序。它有速度快、效率高、可移植的特點。
    的頭像 發表于 09-22 11:30 ?4680次閱讀
    什么是<b class='flag-5'>wasm</b>組件?使用<b class='flag-5'>Rust</b>開發<b class='flag-5'>wasm</b>組件實戰

    時序數據庫是什么?時序數據庫的特點

    時序數據庫是一種在處理時間序列數據方面具有高效和專門化能力的數據庫。它主要用于存儲和處理時間序列數據,比如傳感器數據、監控
    的頭像 發表于 04-26 16:02 ?705次閱讀
    主站蜘蛛池模板: 国产精品久久久精品三级 | 不卡无毒免费毛片视频观看 | 99久久精品费精品国产一区二 | 国产又色 | 国产精品护士 | 性欧美精品久久久久久久 | 久久夜夜视频 | 亚洲一级毛片免费在线观看 | 黄色免费在线视频 | 亚洲影院手机版777点击进入影院 | 天天久久综合网站 | 99色视频在线 | 亚洲日本中文字幕天天更新 | 成年女人色费视频免费 | 全部免费特黄特色大片视频 | 成人黄色免费观看 | 一级特黄aaa大片在线观看视频 | 亚洲免费看片 | 天天干狠狠操 | 色久优优 欧美色久优优 | 欧美日韩精品一区二区另类 | 一品毛片 | 免费在线色视频 | 日日夜夜狠狠 | 天天好比网 | 毛片色毛片18毛片美女 | 91av视频免费在线观看 | 日在线视频 | 国产或人精品日本亚洲77美色 | 成人在色线视频在线观看免费大全 | 狠狠干狠狠鲁 | 日韩毛片一级 | 分分精品| 免费人成年短视频在线观看免费网站 | 在线天堂中文新版有限公司 | 美女网站色在线观看 | 欧美18性精品 | 亚洲经典乱码在线播 | 国产综合久久久久影院 | 亚洲成a人片在线观看www | 99久久久精品免费观看国产 |