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

查詢速度提升兩倍,TDengine 在 GPS 服務(wù)中的應(yīng)用

南京津馳健康 孫衛(wèi)衛(wèi)

2022-02-25 /

小 T 導(dǎo)讀:隨著業(yè)務(wù)的發(fā)展及數(shù)據(jù)量的增長(zhǎng),南京津馳選擇將 TDengine Database 的社區(qū)版搭建在 GPS 服務(wù)中,替代原來的 Redis+MySQL+CSV 存儲(chǔ)技術(shù)方案,以解決查詢效率低、數(shù)據(jù)安全性低、數(shù)據(jù)占用空間大等問題。本文詳細(xì)闡述了其在技術(shù)選型、數(shù)據(jù)建模、數(shù)據(jù)遷移、效果展示等多方面的實(shí)踐思路與經(jīng)驗(yàn)匯總。

公司簡(jiǎn)介

南京津馳健康科技有限公司是一家專業(yè)從事互聯(lián)網(wǎng)技術(shù)服務(wù)、計(jì)算機(jī)軟件開發(fā)及應(yīng)用于一體的互聯(lián)網(wǎng)營(yíng)銷服務(wù)的創(chuàng)新型企業(yè)。在競(jìng)爭(zhēng)激烈的互聯(lián)網(wǎng)行業(yè)中,始終堅(jiān)持以技術(shù)為核心,組建強(qiáng)大的技術(shù)開發(fā)團(tuán)隊(duì),希望通過發(fā)揮我們的專業(yè)知識(shí),以客戶的利益最大化為目標(biāo),為企業(yè)提供線上線下全方位的信息技術(shù)服務(wù)。

一、現(xiàn)狀及痛點(diǎn)

目前我們的 GPS 服務(wù)采用的存儲(chǔ)技術(shù)方案是 Redis + MySQL + CSV,實(shí)時(shí)數(shù)據(jù)存儲(chǔ)到 Redis 隊(duì)列,經(jīng)過服務(wù)消費(fèi)后將原始數(shù)據(jù)存儲(chǔ)到 MySQL,凌晨執(zhí)行定時(shí)任務(wù)將前一天 MySQL 中的原始數(shù)據(jù)存儲(chǔ)到 CSV 文件。

當(dāng)前系統(tǒng)中有 726 臺(tái)設(shè)備,每臺(tái)設(shè)備每秒上傳 1 條數(shù)據(jù),假設(shè)每臺(tái)設(shè)備每年施工 200  天,預(yù)計(jì)一臺(tái)設(shè)備一年有 60*60*24*200=17,280,000 條數(shù)據(jù),那726 臺(tái)設(shè)備就有 726*17,280,000=12,545,280,000 條數(shù)據(jù)。

隨著業(yè)務(wù)的發(fā)展以及數(shù)據(jù)量的增長(zhǎng),各種問題也逐漸凸顯,開始影響工作效率,具體可以歸納為以下幾方面:

  • 查詢效率低

CSV 是文件存儲(chǔ),在讀取數(shù)據(jù)時(shí)只能一個(gè)文件一個(gè)文件地讀取,且需要讀取全部數(shù)據(jù)后再做處理,查詢效率比較低。

  • 數(shù)據(jù)安全性低

最終的數(shù)據(jù)是保存到 CSV 文件中,并且是單文件保存,數(shù)據(jù)丟失將無法找回。雖然也可以手動(dòng)保存多份文件,但這將增加運(yùn)維成本。

  • 數(shù)據(jù)占用空間大

數(shù)據(jù)在 CSV 文件中沒有進(jìn)行任何的壓縮技術(shù)處理,數(shù)據(jù)占用硬盤空間比較大。

  • 數(shù)據(jù)運(yùn)用不夠靈活

由于數(shù)據(jù)既有存儲(chǔ)在 MySQL 中的,也有存儲(chǔ)在 CSV 文件中的,導(dǎo)致查詢數(shù)據(jù)時(shí)得從兩個(gè)數(shù)據(jù)源進(jìn)行查詢。且由于 CSV 是文件存儲(chǔ),從中查詢數(shù)據(jù)還需要先從文件中讀取數(shù)據(jù),也不方便加搜索條件進(jìn)行數(shù)據(jù)過濾。

二、技術(shù)選型

時(shí)序數(shù)據(jù)是指時(shí)間序列數(shù)據(jù),是按時(shí)間順序記錄的數(shù)據(jù)列,在同一數(shù)據(jù)列中的各個(gè)數(shù)據(jù)必須是同口徑的,要求具有可比性。時(shí)序數(shù)據(jù)可以是時(shí)期數(shù),也可以時(shí)點(diǎn)數(shù)。對(duì)以上業(yè)務(wù)所產(chǎn)生的數(shù)據(jù)進(jìn)行分析,完全具備時(shí)序數(shù)據(jù)的特點(diǎn)?;跇I(yè)務(wù)場(chǎng)景的需求,我們決定選擇時(shí)序數(shù)據(jù)庫作為 GPS 服務(wù)平臺(tái)的核心組件。


時(shí)序數(shù)據(jù)庫全稱時(shí)間序列數(shù)據(jù)庫(Time Series Database),是用于存儲(chǔ)和管理時(shí)間序列數(shù)據(jù)的專業(yè)化數(shù)據(jù)庫,具備寫多讀少、冷熱分明、高并發(fā)寫入、無事務(wù)要求、海量數(shù)據(jù)持續(xù)寫入等特點(diǎn),支持基于時(shí)間區(qū)間的聚合分析和高效檢索,廣泛應(yīng)用在物聯(lián)網(wǎng)、經(jīng)濟(jì)金融、環(huán)境監(jiān)控、工業(yè)制造、農(nóng)業(yè)生產(chǎn)、硬件和軟件系統(tǒng)監(jiān)控等場(chǎng)景。


為了更好地實(shí)現(xiàn)業(yè)務(wù)場(chǎng)景的需求,我們調(diào)研了以下幾款時(shí)序數(shù)據(jù)庫產(chǎn)品:InfluxDB、OpenTSDB 和 TDengine。

  • InfluxDB:?jiǎn)螜C(jī)性能有問題,且集群不開源,未來擴(kuò)展很成問題,無法令人信任。
  • OpenTSDB:不是獨(dú)立的服務(wù)組件,還要依賴 HBase、HDFS、ZooKeeper,體積龐大,學(xué)習(xí)成本高,運(yùn)維困難。
  • TDengine:性能強(qiáng)大,單機(jī)就可以扛住我們目前的業(yè)務(wù)寫入量,節(jié)約大量成本。且集群開源,通過社群反饋與資料顯示可以看到,集群版性能依然穩(wěn)定,未來擴(kuò)展方便。

TDengine 的模塊之一是時(shí)序數(shù)據(jù)庫。但除此之外,為減少研發(fā)的復(fù)雜度、系統(tǒng)維護(hù)的難度,TDengine 還提供緩存、消息隊(duì)列、訂閱、流式計(jì)算等功能。與 Hadoop 等典型的大數(shù)據(jù)平臺(tái)相比,TDengine 具有如下鮮明的特點(diǎn):

  • 10 倍以上的性能提升:定義了創(chuàng)新的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),單核每秒能處理至少 2 萬次 請(qǐng)求,插入數(shù)百萬個(gè)數(shù)據(jù)點(diǎn),讀出一千萬以上數(shù)據(jù)點(diǎn),比現(xiàn)有通用數(shù)據(jù)庫快十倍以 上。
  • 硬件或云服務(wù)成本降至 1/5:由于超強(qiáng)性能,計(jì)算資源不到通用大數(shù)據(jù)方案的 1/5;通過列式存儲(chǔ)和先進(jìn)的壓縮算法,存儲(chǔ)占用不到通用數(shù)據(jù)庫的 1/10。
  • 全棧時(shí)序數(shù)據(jù)處理引擎:將數(shù)據(jù)庫、消息隊(duì)列、緩存、流式計(jì)算等功能融為一體, 應(yīng)用無需再集成 Kafka/Redis/HBase/Spark/HDFS 等軟件,大幅降低應(yīng)用開發(fā)和維護(hù)的復(fù)雜度成本。
  • 強(qiáng)大的分析功能:無論是十年前還是一秒鐘前的數(shù)據(jù),指定時(shí)間范圍即可查詢。數(shù)據(jù)可在時(shí)間軸上或多個(gè)設(shè)備上進(jìn)行聚合。即席查詢可通過 Shell、Python、 R、 MATLAB 隨時(shí)進(jìn)行。
  • 高可用性和水平擴(kuò)展:通過分布式架構(gòu)和一致性算法,通過多復(fù)制和集群特性, TDengine 確保了高可用性和水平擴(kuò)展性以支持關(guān)鍵任務(wù)應(yīng)用程序。
  • 零運(yùn)維成本、零學(xué)習(xí)成本:安裝集群簡(jiǎn)單快捷,無需分庫分表,實(shí)時(shí)備份。類似標(biāo)準(zhǔn) SQL,支持 RESTful,支持 Python/Java/C/C++/C#/Go/Node.js, 與 MySQL 相似,零學(xué)習(xí)成本。
  • 核心開源:除了一些輔助功能外,TDengine 的核心是開源的。企業(yè)再也不會(huì)被數(shù)據(jù)庫綁定了。這使生態(tài)更加強(qiáng)大,產(chǎn)品更加穩(wěn)定,開發(fā)者社區(qū)更加活躍。

從開源免費(fèi)、社區(qū)活躍、迭代更新、性能高、開銷低、支持集群等多方面考慮, TDengine 成為了我們的首選解決方案。

目前,我們使用的是單機(jī)。根據(jù)建表的數(shù)據(jù)類型估算,整個(gè)服務(wù)寫入量大約為每秒接近 400M 左右,TDengine 可以輕松抗住這個(gè)級(jí)別的寫入壓力,并且壓縮率喜人。1 億條數(shù)據(jù)硬盤資源占用對(duì)比如下,存儲(chǔ)空間降為原方案的 3%,單位兆:

CSV文件和新方案硬盤占用資源對(duì)比 TDengine Database

而查詢方面也能給出了很優(yōu)秀的答卷,查詢速度提升了兩倍多,單位毫秒

老方案和新方案查詢速度對(duì)比 TDengine Database

三、數(shù)據(jù)建模

由于是既有系統(tǒng)的升級(jí)改造,必須符合現(xiàn)有系統(tǒng)架構(gòu),不能影響現(xiàn)有功能。因此,數(shù)據(jù)建模必須限定在一定的范圍內(nèi),有一定的約束和限制,不像設(shè)計(jì)一個(gè)新系統(tǒng)一樣有很大的自由度。

1.建庫

創(chuàng)建一個(gè)名為 gps 的庫,這個(gè)庫的數(shù)據(jù)將保留 36500 天(超過 36500 天將被自動(dòng)刪除),每 10 天一個(gè)數(shù)據(jù)文件,內(nèi)存塊數(shù)為 4,允許更新數(shù)據(jù)。

CREATE DATABASE gps KEEP 36500 DAYS 10 BLOCKS 4 UPDATE 1;

2.創(chuàng)建超級(jí)表

CREATE TABLE gps_history (gps_time timestamp,
sn   nchar(20),
pile_no int,
lon binary(20),
lat binary(20),
speed float,
temperature int,
status int,
road_float int,
data_status int,
warn_status int,
upload_time timestamp,
create_time timestamp,
remark   nchar(100)
 ) TAGS (
pid nchar(64),
bid nchar(64)
);

3.自動(dòng)創(chuàng)建子表

insert into gps.gps_10001 using gps.gps_history tags ('10001','10002') values (
now,'CY10001',1000,125.91014472833334,45.8548872365,0.01,120,4,1,0,1,
now,
 now,'備注' ); 

4.刪除表

DROP TABLE gps_history;

、代碼改造與數(shù)據(jù)遷移

在 GPS 服務(wù)平臺(tái)現(xiàn)有的架構(gòu)中,有一個(gè)數(shù)據(jù)接收服務(wù)專門對(duì)外提供時(shí)序數(shù)據(jù)的寫入,數(shù)據(jù)分析服務(wù)進(jìn)行計(jì)算并提供查詢服務(wù)。

數(shù)據(jù)遷移架構(gòu)設(shè)計(jì)

基于上圖的架構(gòu)設(shè)計(jì),代碼改造工作就變得非常簡(jiǎn)單。只需要改動(dòng)數(shù)據(jù)接收服務(wù)的寫入、數(shù)據(jù)分析服務(wù)的查詢,再在現(xiàn)有基礎(chǔ)上增加對(duì) TDengine 的支持,就能將寫入和查詢兩個(gè)功能按照 TDengine 的 JDBC 接口進(jìn)行接口適配,將時(shí)序數(shù)據(jù)的寫入和查詢切換到 TDengine。

通過這種方式,我們就把 TDengine 的改造遷移屏蔽在了 GPS 服務(wù)內(nèi)部,上層應(yīng)用無需關(guān)心,功能上不受任何影響。

升級(jí)改造項(xiàng)目,如何保證歷史數(shù)據(jù)的平滑遷移也是一個(gè)重點(diǎn)問題。為此,我們開發(fā)了一個(gè)數(shù)據(jù)遷移工具,用于將 CSV 文件中的歷史數(shù)據(jù)平滑遷移到 TDengine。為了確保海量數(shù)據(jù)的快速遷移,這個(gè)工具還進(jìn)行了持續(xù)的性能優(yōu)化,以及大數(shù)據(jù)量的壓力測(cè)試。

五、升級(jí)上線

第一階段:數(shù)據(jù)遷移

將改造后的新版本上線,CSV 文件和 TDengine 并行運(yùn)行,同時(shí)向兩個(gè)數(shù)據(jù)庫寫入數(shù)據(jù),由于 CSV 文件有全量數(shù)據(jù),查詢請(qǐng)求全部交給 Redis 與 CSV 文件;與此同時(shí),啟動(dòng)數(shù)據(jù)遷移工具,將歷史數(shù)據(jù)遷移到 TDengine,待數(shù)據(jù)遷移完成后,進(jìn)入到第二階段。

第一階段數(shù)據(jù)遷移

第二階段:試運(yùn)行

CSV 文件和 TDengine 并行運(yùn)行,也同時(shí)向兩個(gè)數(shù)據(jù)庫寫入數(shù)據(jù);在數(shù)據(jù)遷移完全完成后,TDengine 中已經(jīng)具備全量數(shù)據(jù),此時(shí),將查詢請(qǐng)求全部切換到 TDengine。觀察兩周左右的時(shí)間,如果沒有發(fā)現(xiàn)問題,將進(jìn)入到第三階段。

第二階段試運(yùn)行 TDengine Database

第三階段:正式上線

經(jīng)過試運(yùn)行TDengine 一切正常,功能和性能都沒有問題,于是我們將 CSV 文件停止運(yùn)行,數(shù)據(jù)只向 TDengine 寫入,CSV 文件占用的資源全部回收。

第三階段正式上線 TDengine Database

六、總結(jié)

目前,TDengine 社區(qū)版已經(jīng)平穩(wěn)運(yùn)行在 GPS 服務(wù)中,其作為時(shí)序數(shù)據(jù)庫在讀寫性能、存儲(chǔ)表現(xiàn)等方面都是令人滿意的。除此之外其在運(yùn)維難度和學(xué)習(xí)成本上也是意想不到的低,很輕松就能搭好一套可用的集群,這也是非常巨大的一個(gè)優(yōu)勢(shì)。另外 TDengine 的版本迭代速度非???,一些在舊版本遇到的問題很快就得到了修復(fù),并且在性能優(yōu)化方面效果也是十分顯著。后期,我們打算在公司內(nèi)部的其他物聯(lián)網(wǎng)產(chǎn)品中繼續(xù)深入使用。