《霍琳贺-2023RustChinaConf大会.pptx》由会员分享,可在线阅读,更多相关《霍琳贺-2023RustChinaConf大会.pptx(29页珍藏版)》请在三个皮匠报告上搜索。
1、第三届中国第三届中国Rust开发者大会开发者大会基于基于 Rust Arrow Flight 的物联网和时序数据传输及转的物联网和时序数据传输及转换工具换工具霍琳贺涛思数据Rust China Conf 2023CONTENTSCONTENTS自 我 介 绍自 我 介 绍T D e n g i n eT D e n g i n et a o s Xt a o s XR u s t R u s t 使 用使 用TDengineTDengineRustRustOOXML-Excel 解析库xlsx2csv-Excel 转 CSV 工具Unqlite-单文件非关系型数据库Wisecondor-生物信
2、息 CNV 分析mdsn-A Multi-address DSN(Data Source Name)parser.TDengine应用开发组Python/Rust/Go 连接器数据可视化数据库运维工具第三方数据源接入BI 系统接入https:/ 我 介 绍自 我 介 绍T D e n g i n eT D e n g i n et a o s Xt a o s XR u s t R u s t 使 用使 用TDengine:时序数据库TDengine 是一款开源、云原生的时序数据库(Time Series Database),专为物联网、工业互联网、金融、IT 运维监控等场景设计并优化,具有极
3、强的弹性伸缩能力。同时它还带有内建的缓存、流式计算、数据订阅等系统功能,能大幅减少系统设计的复杂度,降低研发和运营成本,是一个极简的时序数据处理平台。采用关系型数据库模型需要建库、建表,为提升写入和查询效率,要求一个数据采集点一张表为实现多表聚合,引入超级表概念子表通过超级表创建,带有标签,通过标签实现多表高效聚合 高效写入支持标准 SQL 写入,支持批量写入支持 Schemaless 写入支持从 Kafaka,MQTT,OPC,PI System 以及文件直接导入数据源导入时,可定义规则引擎TDengine:与上下游应用的关系TDengine=Time-Series Database+Cac
4、hing+Data Subscription+Stream ProcessingShell:Command Line InterfaceHigh Performance,Cloud NativeSimplified Solution for Time-Series DataTDengineTelegrafKafkaOPC-UAMQTT BrokerClusteredIndustrial Automated SystemsSCADA/HMIAnalytics,ML AppPython/Matlab/RJava/C/C+/RestfulIoT Application Visualization T
5、ool GrafanaWeb Based Management Tool21,400+4,600+18,500+社区版开源2019.07.12集群版开源2020.08.03云原生版开源2022.08.13注:GitHub 为截止 2023 年 5 月数据TDengine 的核心代码全部开源 50 多个国家安装实例超 270k GitHub 全球趋势排行榜多次排名第一TDengine-数据模型1.设备 ID 及关联属性(Tags)2.时间戳3.结构化采集量STable 超级表Table 子表CREATE STABLE meters(ts TIMESTAMP,current FLOAT,volta
6、ge INT,phase FLOAT)TAGS(groupid INT,location VARCHAR(24)TDengine-业务模式开源版开源版企业版企业版云服务版云服务版核心功能开源核心功能开源SQL 支持无模式写入缓存流计算数据订阅集群、高可用高可靠、线性扩展高可靠、线性扩展+专业技术服务专业技术服务边云数据复制跨云/异地数据复制增量备份多级存储工业数据接入全托管时序数据全托管时序数据管理云服务平台管理云服务平台全托管服务VPC 对等连接多云部署(AWS/Azure/GCP)CONTENTSCONTENTS自 我 介 绍自 我 介 绍T D e n g i n eT D e n g
7、i n et a o s Xt a o s XR u s t R u s t 使 用使 用taosX-物联网数据接入问题 多种不同协议数据对接,开发复杂度高 模块之间关联性不高但模块组成复杂,可维护性差 大量设备大量数据归集存储,存储压力大 数据总线/消息队列消息接入,定制化程度要求高 数据业务逻辑自定义需求强 一定的实时数据分析能力taosX-功能路线图集群运维数据接入流式处理数据分享开放平台Backup/RestoreReplicationMigrationData SourcesIoT ProtocolsStreaming PipelineTransformerData ShareVis
8、ualizationAnalysis PlatformHigh Avalibility2022.122023.052023.09UsabilityFunctionalitytaosX-集群运维 数据库复制 全量/增量备份 数据导入/导出 数据库迁移 异地容灾taosX-数据接入Comming SoontaosX-流式处理taosX-Transformer Parseparse:field1:cast:as:timestamp,with:%e-%b-%Y%H:%M,tz:Asia/Shanghai swap:a,b filter:val1:0 pivot_wider:names_from:fie
9、ld1,values_from:field2pivot_longer:select:device1,device2,device3,device4,names_to:device,values_to:observation parse:field2:regex:(?Pd+)s+(?Pd+)map:new1:expr:field1.contains(abc),as:bool Mutate Filter PivotPowered by serde+arrowtaosX-数据汇聚CONTENTSCONTENTS自 我 介 绍自 我 介 绍T D e n g i n eT D e n g i n et
10、 a o s Xt a o s XR u s t R u s t 使 用使 用Why Rust?安全性 高性能 跨平台兼容 强大的类型系统和抽象表达能力 优秀的 Rust 生态和开发工具链 C FFI 互操作能力 async/await 异步编程Rust-Crates Used in taosXAsync runtime:https:/crates.io/crates/tokioJob Scheduler:https:/crates.io/crates/tokio-cron-schedulerMPMC Channel:https:/crates.io/crates/flumeWeb Servi
11、ce:Framework:https:/crates.io/crates/actix-webOpenAPI:https:/crates.io/crates/utoipaMetrics:https:/crates.io/crates/metricsDatabase:https:/crates.io/crates/sqlxRPC:https:/crates.io/crates/arrow-flight https:/crates.io/crates/tonicAuthentication:https:/crates.io/crates/jsonwebtokenData structure:Arro
12、w:https:/crates.io/crates/arrowParquet:https:/crates.io/crates/parquetCSV:https:/crates.io/creates/csv-asyncCompression:https:/crates.io/crates/zstdAsync Hashmap:https:/crates.io/crates/dashmapArrow Schema with metadata RecordBatch IPC StreamTonic+Arrow Flight 以流为中心的 RPC 框架Tokio-Future and.abort()Fu
13、ture JoinHandle:abort()Tokio-Cancel Case 2:tokio:select with stream:iterCase 1:cancel with blocking codeTokio-Notes 使用非阻塞或并发/异步数据结构 使用异步锁和异步 Channel。使用 spawn_blocking 提交耗时任务 C FFI 调用时,要关注上下文的线程安全性。多个运行时之间使用 Channel 通信,降低锁使用范围。Tokio-Graceful Stop futures:future:Abortable 可用于短路一个 stream tokio_util:sync:CancellationToken 可用于向一个或多个任务发出取消信号,Task 内使用 tokio:select!宏执行相关取消操作。tokio:signal:ctrl_c 接收 Ctrl-C 信号,可用于最终程序退出时的取消操作。谨慎处理任务中 channel 的结束信号。cancel vs.abort:Cancel 处理按预期退出,Abort 要保证安全退出。处理非正常退出(断电、kill-9等),保证系统安全性。Thank you!Tokio-Graceful Stop 将任务恢复作为优雅退出的目标之一。