taosd 寫入與查詢場景下壓縮解壓及加密解密的 CPU 占用分析

在當今大數據時代,時序數據庫的應用越來越廣泛,尤其是在物聯網、工業監控、金融分析等領域。TDengine 作為一款高性能的時序數據庫,憑借獨特的存儲架構和高效的壓縮算法,在存儲和查詢效率上表現出色。然而,隨著數據規模的不斷增長,在保證數據安全性和存儲效率的同時,如何優化 CPU 的資源占用,成為了一個值得深入討論的問題。

本文將探討 TDengine 在數據寫入與查詢場景下的壓縮解壓與加密解密過程中對 CPU 資源的占用情況。通過深入分析 TDengine 的存儲壓縮技術和數據加密功能,我們將評估其在實際應用中的性能表現及對系統資源的影響。希望本篇分析能為 TDengine 用戶提供有價值的參考,幫助大家在實際應用中更好地權衡數據安全、存儲效率與系統性能。

測試環境

系統:Darwin Kernel Version 23.6.0

taosd 版本:

TDengine Enterprise Edition
taosd version: 3.3.5.2.alpha compatible_version: 3.0.0.0
git: 0a42d321120b313019f0ee9b1d7e23599bfd462d
gitOfInternal: ab27dbaf76fa60c57363a3053c9c5b012fafddad
build: macOS-arm64 2025-01-22 15:59:30 +0800

集群:1 dnodes, 1 vgroups, WAL_LEVEL 1

測試準備

建庫時指定加密方式,taosbenchmark 不支持加密建庫。

create database test ENCRYPT_ALGORITHM 'sm4';

insert.json

{"filetype": "insert","cfgdir": "/etc/taos","host": "localhost","port": 6030,"user": "root","password": "taosdata","connection_pool_size": 8,"num_of_records_per_req": 20000,"thread_count": 8,"create_table_thread_count": 10,"result_file": "./insert_res_mix.txt","confirm_parameter_prompt": "no","insert_interval": 0,"continue_if_fail": "yes","databases": [{"dbinfo": {"name": "test","drop": "no","vgroups": 1,"replica": 1,"stt_trigger": 1,"minRows": 100,"WAL_RETENTION_PERIOD": 10,"maxRows": 4096},"super_tables": [{"name": "meters","child_table_exists": "no","auto_create_table":"no","childtable_count": 10000,"insert_rows": 100,"childtable_prefix": "d","insert_mode": "stmt2","insert_interval": 0,"timestamp_step": 900000,"start_timestamp":"2022-09-01 10:00:00","disorder_ratio": 0,"update_ratio": 0,"delete_ratio": 0,"continue_if_fail": "yes","disorder_fill_interval": 0,"update_fill_interval": 0,"generate_row_rule": 0,"columns": [{ "type": "binary","compress":"lz4",      "name": "val", "len": 64},{ "type": "binary","compress":"lz4",      "name": "order_no", "len": 64},{ "type": "binary","compress":"lz4",      "name": "production_no", "len": 64},{ "type": "binary","compress":"lz4",      "name": "modal_no", "len": 64}],"tags": [{  "type": "binary",  "name": "device_no",  "len": 64 ,"values": ["San Francisco", "Los Angles", "San Diego","San Jose", "Palo Alto", "Campbell", "Mountain View","Sunnyvale", "Santa Clara", "Cupertino"] },{ "type": "int",      "name": "channel_id", "max": 100, "min": 0},{  "type": "binary",  "name": "point_no",  "len": 64 ,"values": ["San Francisco", "Los Angles", "San Diego","San Jose", "Palo Alto", "Campbell", "Mountain View","Sunnyvale", "Santa Clara", "Cupertino"]},{ "type": "int",      "name": "datatype", "max": 100, "min": 0},{ "type": "int",      "name": "business_type", "max": 100, "min": 0},{  "type": "binary",  "name": "unit",  "len": 16 ,"values": ["San Francisco", "Los Angles", "San Diego","San Jose", "Palo Alto", "Campbell", "Mountain View","Sunnyvale", "Santa Clara", "Cupertino"]}]}]}]
}

測試結果

場景一:sm4 加密 & lz4 壓縮

測試方法:使用 taosBenchmark 對上面的 json 文件進行數據導入,同時對 taosd 使用 perf 采樣,以下是火焰圖信息。

測試結果:

壓縮:LZ4compress:0.76% + 2.84%(table data compress)+0.1%(Stt)

解密:SM4_decrypt:5.87%(MergeFile)+ 1.12%(MergeFile)

加密:SM4_encrypt:59.02%(WAL) + 10.68%(table data) + 6.97%(table data end) + 2.04%(Stt)

結論:加密比壓縮占用更多 CPU 資源,大約達 70%。這是因為壓縮/解壓僅在數據生成時調用,而寫入 WAL、Meta 數據和落盤至 TSDB 的全過程都涉及加密。此外,系統啟動時,讀取仍存于 WAL 中的未落盤數據、首次從 TSDB 讀取的數據,以及首次訪問 Meta 數據時,均需執行解密操作。

場景二:lz4 壓縮解壓縮

測試方法:使用 Benchmark taosc 導入數據,在使用腳本對所有子表做一遍查詢,對查詢過程打火焰圖分析。

  for (int i = 0; i < 10000; i++) {sprintf(sql, "select * from d_%d", i);do_query(taos, sql);}

測試結果:

壓縮:compressData:3.33%(table data)+1.01%(table data end)

解壓縮:ColDataDecompress/decompressData:1.31%+0.66%+0.22%+0.18%

結論:加密解密的性能占比不高,大部分耗時在 LRU 緩存切換上,因為查詢次數過多,導致測試不理想。

場景三:增大數據量,減少查詢次數,測 lz4 壓縮解壓縮

測試方法:使用 Benchmark taosc 導入 10000 子表,1000 row 數據,查超級表(只查一次)

select * from meters;

測試結果:

壓縮:4.93%(table data end)+7.3%(table data)+0.44%(table data end)

解壓縮:0.95%+0.51%

結論:測試結果顯示,在正常情況下,壓縮/解壓過程占整個查詢的 CPU 開銷約 15%。由于壓縮/解壓僅在數據生成時調用,并且數據以塊形式進行處理,其效率遠高于加密/解密。

結論

通過分析 TDengine在數據寫入與查詢場景下的壓縮解壓與加密解密過程的 CPU 占用情況,可以看出,加密對數據導入影響較大,占用約 77% 的 CPU 資源。寫入 WAL、Meta 數據及落盤至 TSDB 的全過程均涉及加密,而系統啟動時,讀取仍存于 WAL 中的未落盤數據、首次從 TSDB 讀取的數據以及首次訪問 Meta 數據時,則需要執行解密操作。相比之下,壓縮/解壓對數據導入導出的影響較小,僅占 CPU 資源約 15%。這是因為壓縮/解壓僅在數據生成時調用,并且數據以塊形式處理,其效率遠高于加密/解密。

由此可見,TDengine 不僅顯著提高了存儲效率和數據安全性,還在一定程度上優化了 CPU 的資源占用。尤其是在處理平穩變化的時序數據時,TDengine 的差值編碼和通用壓縮技術表現出了極高的壓縮率,為用戶節約了大量的存儲成本。

然而,隨著數據規模的不斷增長,如何在保證數據安全性和存儲效率的同時,進一步優化 CPU 的資源占用,仍然是一個需要持續關注的問題。未來,隨著硬件性能的提升和算法的不斷優化,我們有理由相信,TDengine 將在時序數據庫領域繼續發揮其優勢,為用戶提供更加高效、安全的數據存儲和查詢解決方案。

希望本文的分析能夠為使用 TDengine 的用戶提供一些有價值的參考,幫助大家在實際應用中更好地平衡數據安全、存儲效率與系統性能。如果您對 TDengine 的壓縮和加密技術有更多的疑問或建議,歡迎在評論區留言討論。

想要了解更多 TDengine 的硬核技術,移步 https://docs.taosdata.com/?utm_source=zimeiti-orther&utm_medium=technology-blog&utm_campaign=2025-01-12

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/897230.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897230.shtml
英文地址,請注明出處:http://en.pswp.cn/news/897230.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《UE5_C++多人TPS完整教程》學習筆記34 ——《P35 網絡角色(Network Role)》

本文為B站系列教學視頻 《UE5_C多人TPS完整教程》 —— 《P35 網絡角色&#xff08;Network Role&#xff09;》 的學習筆記&#xff0c;該系列教學視頻為計算機工程師、程序員、游戲開發者、作家&#xff08;Engineer, Programmer, Game Developer, Author&#xff09; Stephe…

K8s 1.27.1 實戰系列(七)Deployment

一、Deployment介紹 Deployment負責創建和更新應用程序的實例,使Pod擁有多副本,自愈,擴縮容等能力。創建Deployment后,Kubernetes Master 將應用程序實例調度到集群中的各個節點上。如果托管實例的節點關閉或被刪除,Deployment控制器會將該實例替換為群集中另一個節點上的…

Linux(Centos 7.6)命令詳解:vim

1.命令作用 vi/vim 是Linux 系統內置不可或缺的文本編輯命令&#xff0c;vim 是vi 的加強版本&#xff0c;兼容vi 的所有指令&#xff0c;不僅能編輯文本&#xff0c;而且還具有shell 程序編輯的功能&#xff0c;可以不同顏色的字體來辨別語法的正確性。 2.命令語法 usage: …

微信小程序引入vant-weapp組件教程

本章教程,介紹如何在微信小程序中引入vant-weapp。 vant-weapp文檔:https://vant-ui.github.io/vant-weapp/#/button 一、新建一個小程序 二、npm初始化 npm init三、安裝 Vant Weapp‘ npm i @vant/weapp -

C++ 作業 DAY5

作業 代碼 Widtget.h class Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();private:Ui::Widget *ui;/************************ 起始終止坐標 ************************/QPoint end;QPoint start;QVector<QPoint> per_start_lis…

Selenium 中 ActionChains 支持的鼠標和鍵盤操作設置及最佳實踐

Selenium 中 ActionChains 支持的鼠標和鍵盤操作設置及最佳實踐 一、引言 在使用 Selenium 進行自動化測試時&#xff0c;ActionChains 類提供了強大的功能&#xff0c;用于模擬鼠標和鍵盤的各種操作。通過 ActionChains&#xff0c;可以實現復雜的用戶交互&#xff0c;如鼠標…

前端面試技術性場景題

87.場景面試之大數運算&#xff1a;超過js中number最大值的數怎么處理 在 JavaScript 中&#xff0c;Number.MAX_SAFE_INTEGER&#xff08;即 2^53 - 1&#xff0c;即 9007199254740991&#xff09;是能被安全表示的最大整數。超過此值時&#xff0c;普通的 Number 類型會出現…

【js逆向】iwencai國內某金融網站實戰

地址&#xff1a;aHR0cHM6Ly93d3cuaXdlbmNhaS5jb20vdW5pZmllZHdhcC9ob21lL2luZGV4 在搜索框中隨便輸入關鍵詞 查看請求標頭&#xff0c;請求頭中有一個特殊的 Hexin-V,它是加密過的&#xff1b;響應數據包中全是明文。搞清楚Hexin-V的值是怎么生成的&#xff0c;這個值和cooki…

ES Module 的 import 導入和 import () 動態導入

ES Module 的 import 導入和 import () 動態導入介紹 一、ES Module 簡介 ES Module 是 JavaScript 官方提供的標準化模塊系統&#xff0c;它的出現解決了長期以來 JavaScript 在模塊管理方面的混亂局面。通過 ES Module&#xff0c;開發者可以更加方便地組織和復用代碼&…

使用Node.js從零搭建DeepSeek本地部署(Express框架、Ollama)

目錄 1.安裝Node.js和npm2.初始化項目3.安裝Ollama4.下載DeepSeek模型5.創建Node.js服務器6.運行服務器7.Web UI對話-Chrome插件-Page Assist 1.安裝Node.js和npm 首先確保我們機器上已經安裝了Node.js和npm。如果未安裝&#xff0c;可以通過以下鏈接下載并安裝適合我們操作系…

BUUCTF——[GYCTF2020]FlaskApp1 SSTI模板注入/PIN學習

目錄 一、網頁功能探索 二、SSTI注入 三、方法一 四、方法二 使用PIN碼 &#xff08;1&#xff09;服務器運行flask登錄所需的用戶名 &#xff08;2&#xff09;modename &#xff08;3&#xff09;flask庫下app.py的絕對路徑 &#xff08;4&#xff09;當前網絡的mac地…

Java基礎關鍵_018_集合(二)

目 錄 一、泛型 ※ 1.說明 2.實例 3.擦除與補償 4.泛型的定義 &#xff08;1&#xff09;類定義 &#xff08;2&#xff09;靜態方法定義 &#xff08;3&#xff09;接口定義 5.通配符 &#xff08;1&#xff09;無限定 &#xff08;2&#xff09;上限 &#xff…

FPGA學習篇——Verilog學習3(關鍵字+注釋方法+程序基本框架)

1 Verilog常用關鍵字 大概知道以下哪些是關鍵字就好&#xff0c;如何使用還是得在編寫代碼中來學習。 2 Verilog注釋方法 Verilog有兩種注釋方式&#xff1a; 2.1 “ // ” 單行。 2.2 “ /* ... */ ” 可擴展多行。 3 Verilog程序基本框架 Verilog 的基本設計單元是“…

FPGA之USB通信實戰:基于FX2芯片的Slave FIFO回環測試詳解

FPGA之Usb數據傳輸 Usb 通信 你也許會有疑問&#xff0c;明明有這么多通信方式和數據傳輸&#xff08;SPI、I2C、UART、以太網&#xff09;為什么偏偏使用USB呢? 原因有很多&#xff0c;如下&#xff1a; 1. 高速數據傳輸能力 高帶寬&#xff1a;USB接口提供了較高的數據傳…

深入理解與配置 Nginx TCP 日志輸出

一、背景介紹 在現代網絡架構中&#xff0c;Nginx 作為一款高性能的 Web 服務器和反向代理服務器&#xff0c;廣泛應用于各種場景。除了對 HTTP/HTTPS 協議的出色支持&#xff0c;Nginx 從 1.9.0 版本開始引入了對 TCP 和 UDP 協議的代理功能&#xff0c;這使得它在處理數據庫…

【大模型安全】安全解決方案

【大模型安全】安全解決方案 1.技術層面2.數據層面數據收集階段訓練階段模型推理階段 1.技術層面 在使用大語言模型時&#xff0c;通常有幾種選擇&#xff1a;一種是采用封裝好的大語言模型SaaS云服務&#xff1b;另一種是在公有云上部署自有的大語言模型&#xff0c;并通過權…

python中httpx庫的詳細使用及案例

文章目錄 1. 安裝 httpx2. 同步請求3. 異步請求4. 高級功能5. 錯誤處理6. 配置客戶端7. 結合 Beautiful Soup 使用8. 示例:抓取并解析網頁9. 注意事項httpx 是一個現代化的 Python HTTP 客戶端庫,支持同步和異步請求,功能強大且易于使用。它比 requests 更高效,支持 HTTP/2…

OpenCV計算攝影學(19)非真實感渲染(Non-Photorealistic Rendering, NPR)

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 非真實感渲染&#xff08;Non-Photorealistic Rendering, NPR&#xff09;是一種計算機圖形學技術&#xff0c;旨在生成具有藝術風格或其他非現實…

微信小程序點擊按鈕,將圖片下載到本地

前言&#xff1a; 最近在公司完成一個小程序的時候需要實現一個功能&#xff1a;點擊按鈕獲取用戶相冊權限&#xff0c;將圖片下載到用戶本地相冊&#xff0c;經過了好幾次的嘗試最終算是實現了。將總結的經驗在這里分享給小伙伴們。 實現方式&#xff1a; //.wxml文件 <…

數據倉庫為什么要分層

數據倉庫分層架構是數據倉庫設計中的一個重要概念&#xff0c;其主要目的是為了更好地組織和管理數據&#xff0c;提高數據倉庫的可維護性、可擴展性和性能。分層架構將數據倉庫劃分為多個層次&#xff0c;每個層次都有其特定的職責和功能。以下是數據倉庫分層的主要原因和好處…