六月婷婷AV,国产偷窥猎奇福利二区,日韩三级片。,好吊色网站,日韩成人中文在线视频,国产亚洲午夜啪啪,亚洲欧美另类国产精品,国产成人av1,任你艹在线观看

一個服務(wù)器輕松存儲上億數(shù)據(jù),TDengine 在北京智能建筑邊緣存儲的應(yīng)用

北京智能建筑 薛佳志

2022-03-09 /

小 T 導(dǎo)讀:在北京智能建筑邊緣側(cè)采集數(shù)據(jù)存儲的方案中,面臨著在有限的計(jì)算資源下,如何實(shí)現(xiàn)最高效的數(shù)據(jù)存儲、分析和計(jì)算的問題。經(jīng)過調(diào)研與測試,最終選擇了由 TDengine Database 處理時序數(shù)據(jù),SQLite 處理關(guān)系數(shù)據(jù),以此更好地實(shí)現(xiàn)邊緣側(cè)的數(shù)據(jù)自治。本文講述了他們的選型和建模思路以及落地后的效果展示,作為經(jīng)驗(yàn)參考分享給有需要的讀者。

公司簡介

北京智能建筑科技有限公司作為北京市在智能建筑和智慧城市領(lǐng)域的創(chuàng)新平臺,是冬奧科技平臺公司、智慧冬奧國家重點(diǎn)項(xiàng)目設(shè)計(jì)單位和核心實(shí)施單位,同時,北智建作為國家高新技術(shù)企業(yè),致力于打造中國最大的智能建筑 AIoT 平臺。

一個服務(wù)器輕松存儲上億數(shù)據(jù),TDengine 在北京智能建筑邊緣存儲的應(yīng)用 - TDengine Database 時序數(shù)據(jù)庫

在云計(jì)算模式中,采集的數(shù)據(jù)必須要傳到云上進(jìn)行集中式的存儲、歸檔及分析,依托云端計(jì)算資源進(jìn)行復(fù)雜的計(jì)算,再將所得到的指導(dǎo)性結(jié)論通過網(wǎng)絡(luò)下發(fā)給終端。而對于邊緣計(jì)算,即把一部分的存儲和計(jì)算的能力下沉到邊緣側(cè)(即設(shè)備側(cè)),由于終端設(shè)備可以較獨(dú)立地進(jìn)行數(shù)據(jù)存儲、計(jì)算、決策和應(yīng)用,因此邊緣側(cè)會更加智能,對云端依賴更小,數(shù)據(jù)處理的時效性也更高,且不再受網(wǎng)絡(luò)影響。

一般來說,邊緣側(cè)往往是一些能夠大量鋪設(shè)的小型智能終端,出于成本考慮,其配置的內(nèi)存、CPU 等硬件資源和計(jì)算能力都很有限。邊緣計(jì)算的難點(diǎn)就在于能否在有限的計(jì)算資源下,實(shí)現(xiàn)最高效的數(shù)據(jù)存儲、分析和計(jì)算??偨Y(jié)下來,邊緣計(jì)算對數(shù)據(jù)庫能力的要求主要反映在以下幾個方面,這也是我們在選擇數(shù)據(jù)庫時的重點(diǎn)考量維度:

  • 超高讀寫性能
  • 低硬件開銷
  • 通用接口,適配邊緣側(cè)多樣計(jì)算需求
  • 實(shí)時數(shù)據(jù)的緩存能力、流式計(jì)算能力
  • 歷史數(shù)據(jù)持久化存儲、高效壓縮能力
  • 歷史數(shù)據(jù)回溯能力、按時間窗口的統(tǒng)計(jì)聚合能力

一、技術(shù)選型

整體而言,時序數(shù)據(jù)庫(Time-Series Database)具備上述各項(xiàng)能力,也是邊緣側(cè)采集數(shù)據(jù)存儲的最佳選擇。但市面上時序數(shù)據(jù)庫產(chǎn)品眾多,如何篩選也是一個難點(diǎn)。

OpenTSDB(底層基于 HBase 改造)、InfluxDB 等一類的時序數(shù)據(jù)庫,其運(yùn)行起來的硬件資源開銷過高,對于邊緣側(cè)來說還是太重了。后來我們觀察到了一個極輕量化的開源時序數(shù)據(jù)庫 —— TDengine,當(dāng)時它的整個安裝包只有 2 MB 多,使用 C 語言完全自主研發(fā),核心功能就是一個高性能分布式時序數(shù)據(jù)庫。具體優(yōu)勢匯總?cè)缦拢?/p>

  • TDengine 社區(qū)已經(jīng)發(fā)布了支持 ARM64 處理器的版本,可以順暢地運(yùn)行在樹莓派等主流的邊緣側(cè)硬件上,同時提供對實(shí)時數(shù)據(jù)的緩存、歷史數(shù)據(jù)的回溯、按時間段進(jìn)行聚合計(jì)算等多種能力。
  • TDengine ARM 版本支持的接口也有很多種,與正常集群版幾乎沒有區(qū)別。同時,它還提供了一個 taos shell 客戶端,讓調(diào)試人員可以方便地去查看 TDengine 的運(yùn)行狀態(tài)。
  • 支持包括 C/C++、JAVA、Python、RESTful、Go 在內(nèi)的多種語言,學(xué)習(xí)成本低
  • 安裝超級簡單,無任何依賴
TDengine Database 安裝無任何依賴
  • 使用便捷

SQLite VS TDengine

另外提起邊緣側(cè)、嵌入式設(shè)備中的數(shù)據(jù)存儲,那就不得不提 SQLite。SQLite 是一個不需要后臺的超輕量級數(shù)據(jù)庫,即插即用的特點(diǎn)也讓它成為世界上裝機(jī)量最高的數(shù)據(jù)庫。SQLite甚至在官網(wǎng)上將自身定位與 fopen() 對標(biāo),而不再是作為一款數(shù)據(jù)庫。SQLite 提供的一系列 API 都是對標(biāo)關(guān)系型數(shù)據(jù)庫的,它甚至還支持了事務(wù),因此業(yè)界常常把它用作嵌入式關(guān)系型數(shù)據(jù)庫。其與 TDengine 的各項(xiàng)對比如下:

TDengine Database vs SQLite

從上面的比較中我們可以看到,TDengine 和 SQLite 要處理的問題側(cè)重點(diǎn)不同,各有所長。從我們自身業(yè)務(wù)的切實(shí)需求出發(fā),兩者并非必須要進(jìn)行取舍,而是可以根據(jù)業(yè)務(wù)需求靈活搭配使用——由 TDengine 處理時序數(shù)據(jù),由 SQLite 處理關(guān)系數(shù)據(jù),以此更好地實(shí)現(xiàn)邊緣側(cè)的數(shù)據(jù)自治?;诖?,在存儲方面我們決定采用 TDengine + SQLite 的組合形式。

SQLite + TDengine Database

二、架構(gòu)與具體實(shí)現(xiàn)

技術(shù)架構(gòu)

  • 物理視圖
TDengine Database 技術(shù)架構(gòu)物理視圖
  • 邏輯視圖
技術(shù)架構(gòu)邏輯視圖 TDengine Database

在邊緣端日志功能(為邊緣端的設(shè)備提供日志上報(bào))的設(shè)計(jì)上,我們采用 TDengine 對日志進(jìn)行存儲,該功能的設(shè)計(jì)是為出現(xiàn)異常狀況的設(shè)備提供溯源依據(jù),在與告警功能配合下可以讓開發(fā)人員快速定位到問題,及時進(jìn)行解決。此外在邊緣端進(jìn)行日志處理,就能利用邊緣端的算力減輕中臺的壓力,還可以支撐 2 萬設(shè)備異常情況下的日志并發(fā)寫入。

對于設(shè)備的采集值,我們同樣采用 TDengine 進(jìn)行存儲和檢索。以往采用關(guān)系型數(shù)據(jù)庫進(jìn)行存儲時,在設(shè)備比較多、數(shù)據(jù)量龐大的情況下,查詢會非常的慢,體驗(yàn)感極差。反觀 TDengine 高壓縮算法能提升 10 到 20 倍的壓縮性能,降低存儲壓力的同時也解決了數(shù)據(jù)存儲成本高的問題,還達(dá)到了降低硬件成本的效果。

建表建庫思路

  • 直接輸入 taos 進(jìn)入 TDengine 界面
  • SHOW DATABASES 查看數(shù)據(jù)庫
  • USE db_name; 選擇數(shù)據(jù)庫
  • SHOW TABLES; 查看表
  • CREATE DATABASE 創(chuàng)建庫
  • CREATE TABLE 創(chuàng)建表
  • INSERT INTO 插入數(shù)據(jù)
  • SELECT 查詢數(shù)據(jù)
TDengine Database 界面 1
TDengine Database 界面 2

三、落地效果

在產(chǎn)品開發(fā)初期階段,我們也嘗試過其他類型的數(shù)據(jù)庫解決方案,但都因?yàn)楦鞣N問題而擱置了。因?yàn)檠邪l(fā)團(tuán)隊(duì)精力人力有限,我們沒有考慮過自己搭建一套大數(shù)據(jù)處理平臺,畢竟要充分整合 Kafka、HBase、Hadoop、Spark 這一系列開源框架不僅意味要花費(fèi)大量人力,還需要更多的時間去調(diào)試開源框架本身的問題,融合及聯(lián)調(diào)不同框架也存在著很多數(shù)據(jù)一致性的問題,同時也意味著后期運(yùn)維成本的大幅度增加,穩(wěn)定性也是個不小的未知數(shù)。

所幸遇到了 TDengine,它幫助我們在邊緣側(cè)解決了一個很大的問題,即邊緣存儲的問題。因?yàn)楹芏鄷r候邊緣是布署在資源比較少的機(jī)器上面,甚至是 ARM 的工業(yè)盒子上面,在資源使用上非常的苛刻,而現(xiàn)在得益于 TDengine 超強(qiáng)的壓縮算法,我們使用非常小的存儲空間就存儲了幾千萬數(shù)據(jù),壓縮率遠(yuǎn)超 1/20,在單機(jī)上面布署一個 TDengine 服務(wù)器就可以輕輕松松地存儲上億的數(shù)據(jù)。

此外它還擁有超強(qiáng)的計(jì)算能力,占用的資源也非常小,在我們的業(yè)務(wù)中千萬級數(shù)據(jù)檢索時間達(dá)到了毫秒級,從用戶角度來說產(chǎn)品體驗(yàn)非常好。在運(yùn)維層面,TDengine 提供標(biāo)準(zhǔn)的 SQL 語法,有過 SQL 使用經(jīng)驗(yàn)的同學(xué)基本上很快就能上手,學(xué)習(xí)成本接近于零。

四、寫在最后

事實(shí)上,TDengine 這款 Database 我已經(jīng)關(guān)注很久了,我也和濤思的同學(xué)們提出過一些在使用過程中發(fā)現(xiàn)的 Bug,從最初的版本到現(xiàn)在的產(chǎn)品,TDengine 變得更加強(qiáng)大和成熟。作為它的“老朋友”,我在此也提出兩個改進(jìn)優(yōu)化建議,以便幫助它更好的成長:

  • 現(xiàn)在安裝 TDengine Server 時要向下兼容 TaosClient,如果在升級 Server 時,我不需要再在自己的服務(wù)器上面同時升級 TaosClient,可以減少一些部署步驟。
  • 如果我們用 kubernetes 進(jìn)行部署,POD 刪掉重啟后服務(wù)就無法啟動了,還需要在掛載的數(shù)據(jù)文件夾里面手動去修改配置,非常地不靈活。

我們與 TDengine 的合作不會止于此,未來等到 TDengine 更加成熟穩(wěn)定后,不僅我們的邊緣計(jì)算存儲要使用它,甚至我們的中臺數(shù)據(jù)也要遷移到上面。