吴忠躺衫网络科技有限公司

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

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

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

從WasmEdge運(yùn)行環(huán)境讀寫Rust Wasm應(yīng)用的時(shí)序數(shù)據(jù)

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

WebAssembly (Wasm) 正在成為一個(gè)廣受歡迎的編譯目標(biāo),幫助開發(fā)者構(gòu)建可遷移平臺(tái)的應(yīng)用。最近 Greptime 和 WasmEdge 協(xié)作,支持了在 WasmEdge 平臺(tái)上的 Wasm 應(yīng)用通過 MySQL 協(xié)議讀寫 GreptimeDB 中的時(shí)序數(shù)據(jù)。

什么是 WebAssembly

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

什么是 WasmEdge

WasmEdge 是 CNCF 的沙箱項(xiàng)目,提供上文提到的沙盒能力,允許開發(fā)者在 WebAssembly 標(biāo)準(zhǔn)的基礎(chǔ)上,進(jìn)一步擴(kuò)展其能訪問的資源和接口。例如,WasmEdge 為 Wasm 提供了額外的 TLS、網(wǎng)絡(luò)能力和 AI 能力,大大豐富了使用場(chǎng)景。

WasmEdge GitHub 地址:

https://github.com/WasmEdge/WasmEdge

安裝 GreptimeDB 和 WasmEdge

如果你已經(jīng)安裝了 GreptimeDB ,可以跳過這個(gè)步驟。

下載 GreptimeDB 并運(yùn)行:

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 應(yīng)用

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

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

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

編輯Cargo.toml增加依賴。mysql_async的應(yīng)用需要tokio運(yùn)行時(shí),WasmEdge 維護(hù)了這兩個(gè)庫的修改版本,使他們能夠編譯成 WebAssembly 代碼,并且運(yùn)行到 WasmEdge 環(huán)境中。

[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"]}

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

通過環(huán)境變量讀取數(shù)據(jù)庫地址,并創(chuàng)建連接池;

執(zhí)行 SQL 語句創(chuàng)建數(shù)據(jù)表;

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

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

定義數(shù)據(jù)結(jié)構(gòu):

#[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,
}
}

}

初始化數(shù)據(jù)庫連接池:

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(())
}

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

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

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

 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?;

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

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 團(tuán)隊(duì)提供的tokio和mysql_async庫與原始版本編程接口完全一致,因此可以無縫地將普通 Rust 應(yīng)用切換到 WebAssembly 平臺(tái)上。

編譯這個(gè)項(xiàng)目,我們可以獲得 greptimedb.wasm 文件:

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

通過 WasmEdge 運(yùn)行我們的程序:

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

上面這段示例程序已經(jīng)納入了 WasmEdge 的數(shù)據(jù)庫使用示例,你可以在 GitHub 倉(cāng)庫找到完整的代碼:

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

總結(jié)

WasmEdge 為 WebAssembly 應(yīng)用提供了更多的擴(kuò)展能力。如果你也將應(yīng)用部署在 WebAssembly 環(huán)境里,未來我們還可以使用 OpenTelemetry SDK 采集指標(biāo)數(shù)據(jù)直接存儲(chǔ)到 GreptimeDB 。現(xiàn)在就下載 GreptimeDB 或開通 GreptimeCloud 實(shí)例運(yùn)行上面的例子吧。

審核編輯:湯梓紅

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

    關(guān)注

    5

    文章

    392

    瀏覽量

    37427
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    829

    瀏覽量

    26741
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    661

    瀏覽量

    33040
  • GitHub
    +關(guān)注

    關(guān)注

    3

    文章

    473

    瀏覽量

    16564
  • Rust
    +關(guān)注

    關(guān)注

    1

    文章

    230

    瀏覽量

    6664

原文標(biāo)題:從 WasmEdge 運(yùn)行環(huán)境讀寫 Rust Wasm 應(yīng)用的時(shí)序數(shù)據(jù)

文章出處:【微信號(hào):Rust語言中文社區(qū),微信公眾號(hào):Rust語言中文社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何在Rust讀寫文件

    見的內(nèi)存安全問題和數(shù)據(jù)競(jìng)爭(zhēng)問題。 在Rust中,讀寫文件是一項(xiàng)非常常見的任務(wù)。本教程將介紹如何在Rust讀寫文件,包括基礎(chǔ)用法和進(jìn)階用法。
    的頭像 發(fā)表于 09-20 10:57 ?2121次閱讀

    時(shí)序數(shù)據(jù)庫HiTSDB的深度解析!

    深度解讀!時(shí)序數(shù)據(jù)庫HiTSDB:分布式流式聚合引擎
    發(fā)表于 07-22 13:22

    多片段時(shí)序數(shù)據(jù)建模預(yù)測(cè)實(shí)踐資料分享

    時(shí)序數(shù)據(jù)建模分析已經(jīng)有很多相關(guān)的應(yīng)用了,在這個(gè)領(lǐng)域里面LSTM網(wǎng)絡(luò)絕對(duì)是占據(jù)著非常重要的作用,自從LSTM網(wǎng)絡(luò)提出以來,陸陸續(xù)續(xù)又出現(xiàn)了很多相關(guān)的變種網(wǎng)絡(luò),傳統(tǒng)的時(shí)序建模工作主要是基于一個(gè)指定的時(shí)序數(shù)據(jù)
    發(fā)表于 06-30 07:52

    關(guān)于時(shí)序數(shù)據(jù)庫的內(nèi)容

    簡(jiǎn)介: 這是一篇無法一口氣讀完的、文字過萬[正文字?jǐn)?shù)14390]的長(zhǎng)文,這是一個(gè)無法中途不上廁所就看完的、關(guān)于時(shí)序數(shù)據(jù)庫的視頻[時(shí)長(zhǎng)111分鐘]分享的文字整理..大家好,很開心能夠和大家一起交流時(shí)序數(shù)據(jù)
    發(fā)表于 07-12 08:00

    什么是時(shí)序數(shù)據(jù)庫?

    數(shù)據(jù)庫(TSDB)是一個(gè)為了用于處理時(shí)間序列數(shù)據(jù)而優(yōu)化的軟件系統(tǒng),其按時(shí)間數(shù)值或時(shí)間范圍進(jìn)行索引。時(shí)序數(shù)據(jù)庫增長(zhǎng)趨勢(shì)時(shí)序數(shù)據(jù)2014年開
    發(fā)表于 07-12 08:35

    Wasm軟件生態(tài)系統(tǒng)安全分析

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

    TableStore時(shí)序數(shù)據(jù)存儲(chǔ) - 架構(gòu)篇

    摘要:?背景 隨著近幾年物聯(lián)網(wǎng)的發(fā)展,時(shí)序數(shù)據(jù)迎來了一個(gè)不小的爆發(fā)。DB-Engines上近兩年的數(shù)據(jù)庫類型增長(zhǎng)趨勢(shì)來看,時(shí)序數(shù)據(jù)庫的增長(zhǎng)是非常迅猛的。在去年我花了比較長(zhǎng)的時(shí)間去了解
    發(fā)表于 08-08 16:17 ?617次閱讀
    TableStore<b class='flag-5'>時(shí)序數(shù)據(jù)</b>存儲(chǔ) - 架構(gòu)篇

    時(shí)序數(shù)據(jù)庫的前世今生

    的頻頻發(fā)聲,正說明各家企業(yè)已經(jīng)迫不及待的擁抱物聯(lián)網(wǎng)時(shí)代的到來。 本文會(huì)時(shí)序數(shù)據(jù)庫的基本概念、應(yīng)用場(chǎng)景、需求與能力等方面一一展開,帶你了解時(shí)序數(shù)據(jù)庫的前世今生。 01 應(yīng)用場(chǎng)景 時(shí)序數(shù)據(jù)
    的頭像 發(fā)表于 12-17 17:51 ?3661次閱讀

    華為時(shí)序數(shù)據(jù)庫為智慧健康養(yǎng)老行業(yè)貢獻(xiàn)應(yīng)用之道

    隨著 IoT 技術(shù)的快速發(fā)展,物聯(lián)網(wǎng)設(shè)備產(chǎn)生的數(shù)據(jù)呈爆炸式增長(zhǎng)。這些數(shù)據(jù)通常隨時(shí)間產(chǎn)生,稱之為時(shí)序數(shù)據(jù)。這樣的一種專門用于管理時(shí)序數(shù)據(jù)數(shù)據(jù)
    的頭像 發(fā)表于 11-07 15:10 ?5971次閱讀

    華為PB級(jí)時(shí)序數(shù)據(jù)庫Gauss DB,助力海量數(shù)據(jù)處理

    ??近年來,時(shí)序數(shù)據(jù)的應(yīng)用更為廣泛,包括物聯(lián)網(wǎng)、金融領(lǐng)域、監(jiān)控領(lǐng)域、醫(yī)學(xué)領(lǐng)域、農(nóng)業(yè)生產(chǎn)領(lǐng)域等各方面,都在大量使用時(shí)序數(shù)據(jù),通過數(shù)據(jù)來研究對(duì)象的趨勢(shì)性、規(guī)律性、異常性;并且在 5G 與人工智能的浪潮下
    的頭像 發(fā)表于 10-15 19:15 ?1174次閱讀
    華為PB級(jí)<b class='flag-5'>時(shí)序數(shù)據(jù)</b>庫Gauss DB,助力海量<b class='flag-5'>數(shù)據(jù)</b>處理

    WasmEdge增加了Tokio支持

    WasmEdge 成功地移植了 tokio(一個(gè) Rust 異步運(yùn)行時(shí))到 Wasm:https://github.com/WasmEdge
    的頭像 發(fā)表于 12-05 11:55 ?889次閱讀

    物聯(lián)網(wǎng)場(chǎng)景海量時(shí)序數(shù)據(jù)存儲(chǔ)與處理的關(guān)鍵技術(shù)

    時(shí)序數(shù)據(jù)是隨時(shí)間不斷產(chǎn)生的一系列數(shù)據(jù),例如持續(xù)監(jiān)控的氣象變化數(shù)據(jù)、股市交易記錄、應(yīng)用監(jiān)控數(shù)據(jù)等,通常一個(gè)時(shí)序數(shù)據(jù)點(diǎn)可以由
    發(fā)表于 12-27 11:58 ?2412次閱讀

    涂鴉推出NekoDB時(shí)序數(shù)據(jù)庫,助力全球客戶實(shí)現(xiàn)低成本部署

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

    什么是wasm組件?使用Rust開發(fā)wasm組件實(shí)戰(zhàn)

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

    時(shí)序數(shù)據(jù)庫是什么?時(shí)序數(shù)據(jù)庫的特點(diǎn)

    時(shí)序數(shù)據(jù)庫是一種在處理時(shí)間序列數(shù)據(jù)方面具有高效和專門化能力的數(shù)據(jù)庫。它主要用于存儲(chǔ)和處理時(shí)間序列數(shù)據(jù),比如傳感器數(shù)據(jù)、監(jiān)控
    的頭像 發(fā)表于 04-26 16:02 ?704次閱讀
    百家乐官网管理启发书| 水果机规律| 网上玩百家乐官网游戏有人挣到钱了吗 | 大发888下载 df888gfxzylc8 | 莆田棋牌游戏下载| 百家乐赢家球讯网| 百家乐官网路子分析| 百家乐全部规| 七胜百家乐官网娱乐平台| 博彩套利| 澳门百家乐开户投注| 百家乐官网棋牌正式版| 大发888体育注册| 博盈百家乐游戏| 迪威百家乐官网娱乐| 真人游戏 豆瓣| 百家乐牌数计算法| 百家乐官网辅助分析软件| 德州扑克大小规则| 百家乐视频双扣游戏| 在线百家乐官网安卓| 德州扑克辅助软件| 网络百家乐赌博赢钱| 大杀器百家乐官网学院| 皇冠在线投注网| 百家乐娱乐分析软件v| 百家乐官网博彩破解论坛| 网上百家乐官网如何作假| 大发888官网注册| 现场百家乐玩法| 博必发百家乐官网的玩法技巧和规则 | 海南省| 百家乐玩法| 澳门百家乐赢钱秘诀| 百家乐官网园百利宫娱乐城信誉好...| 大丰收娱乐城开户| 百家乐免费改| 百家乐玩法教学视频| 百家乐官网赌博程序| 百家乐官网策略| 亿博娱乐|