欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

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

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

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

什么是 WebAssembly

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

什么是 WasmEdge

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

WasmEdge GitHub 地址:

https://github.com/WasmEdge/WasmEdge

安裝 GreptimeDB 和 WasmEdge

如果你已經(jīng)安裝了 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 協(xié)議,讓 Rust 語言編寫的應用程序連接到 GreptimeDB。

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

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

編輯Cargo.toml增加依賴。mysql_async的應用需要tokio運行時,WasmEdge 維護了這兩個庫的修改版本,使他們能夠編譯成 WebAssembly 代碼,并且運行到 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"]}

進一步編輯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:[email protected]: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 團隊提供的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

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

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

總結(jié)

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

審核編輯:湯梓紅

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

    關(guān)注

    5

    文章

    392

    瀏覽量

    37448
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    831

    瀏覽量

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

    關(guān)注

    0

    文章

    662

    瀏覽量

    33071
  • GitHub
    +關(guān)注

    關(guān)注

    3

    文章

    474

    瀏覽量

    16621
  • Rust
    +關(guān)注

    關(guān)注

    1

    文章

    230

    瀏覽量

    6675

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

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

收藏 人收藏

    評論

    相關(guān)推薦

    如何在Rust讀寫文件

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    WasmEdge增加了Tokio支持

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

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

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

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

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

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

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

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

    時序數(shù)據(jù)庫是一種在處理時間序列數(shù)據(jù)方面具有高效和專門化能力的數(shù)據(jù)庫。它主要用于存儲和處理時間序列數(shù)據(jù),比如傳感器數(shù)據(jù)、監(jiān)控
    的頭像 發(fā)表于 04-26 16:02 ?717次閱讀