TDengine 高級功能——讀緩存

在這里插入圖片描述

簡介

在物聯網(IoT)和工業互聯網(IIoT)大數據應用場景中,實時數據的價值往往遠超歷史數據。企業不僅需要數據處理系統具備高效的實時寫入能力,更需要能快速獲取設備的最新狀態,或者對最新數據進行實時計算和分析。無論是工業設備的狀態監控、車聯網中的車輛位置追蹤,還是智能儀表的實時讀數,當前值都是業務運行中不可或缺的核心數據。這些數據直接關系到生產安全、運營效率以及用戶體驗。

例如,在工業生產中,生產線設備的當前運行狀態至關重要。操作員需要實時監控溫度、壓力、轉速等關鍵指標,一旦設備出現異常,這些數據必須即時呈現,以便迅速調整工藝參數,避免停產或更大的損失。在車聯網領域,以滴滴為例,車輛的實時位置數據是滴滴平臺優化派單策略、提升運營效率的關鍵,確保每位乘客快速上車并享受更高質量的出行體驗。

同時,看板系統和智能儀表作為現場操作和用戶端的窗口,也需要實時數據支撐。無論是工廠管理者通過看板獲取的實時生產指標,還是家庭用戶隨時查詢智能水表、電表的用量,實時性不僅影響到運營和決策效率,更直接關系到用戶對服務的滿意程度。

傳統緩存方案的局限性

為了滿足這些高頻實時查詢需求,許多企業選擇將 Redis 等緩存技術集成到大數據平臺中,通過在數據庫和應用之間添加一層緩存來提升查詢性能。然而,這種方法也帶來了不少問題:

  • 系統復雜性增加:需要額外部署和維護緩存集群,對系統架構提出了更高的要求。
  • 運營成本上升:需要額外的硬件資源來支撐緩存,增加了維護和管理的開銷。
  • 一致性問題:緩存和數據庫之間的數據同步需要額外的機制來保障,否則可能出現數據不一致的情況。

TDengine 的解決方案:內置讀緩存

為了解決這些問題,TDengine 針對物聯網和工業互聯網的高頻實時查詢場景,設計并實現了讀緩存機制。這一機制能夠自動將每張表的最后一條記錄緩存到內存中,從而在不引入第三方緩存技術的情況下,直接滿足用戶對當前值的實時查詢需求。

TDengine 采用時間驅動的緩存管理策略,將最新數據優先存儲在緩存中,查詢時無需訪問硬盤即可快速返回結果。當緩存容量達到設定上限時,系統會批量將最早的數據寫入硬盤,既提升了查詢效率,也有效減少了硬盤的寫入負擔,延長硬件使用壽命。

用戶可通過設置 cachemodel 參數,自定義緩存模式,包括緩存最新一行數據、每列最近的非 NULL 值,或同時緩存行和列的數據。這種靈活設計在物聯網場景中尤為重要,使設備狀態的實時查詢更加高效精準。

這種讀緩存機制的內置化設計顯著降低了查詢延遲,避免了引入 Redis 等外部系統的復雜性和運維成本。同時,減少了頻繁查詢對存儲系統的壓力,大幅提升系統的整體吞吐能力,確保在高并發場景下依然穩定高效運行。通過讀緩存,TDengine 為用戶提供了一種更輕量化的實時數據處理方案,不僅優化了查詢性能,還降低了整體運維成本,為物聯網和工業互聯網用戶提供強有力的技術支持。

TDengine 的讀緩存配置

在創建數據庫時,用戶可以選擇是否啟用緩存機制以存儲該數據庫中每張子表的最新數據。這一緩存機制由數據庫創建參數 cachemodel 進行控制。參數 cachemodel 具有如下 4 種情況:

  • none:不緩存
  • last_row:緩存子表最近一行數據,這將顯著改善 last_row 函數的性能
  • last_value:緩存子表每一列最近的非 NULL 值,這將顯著改善無特殊影響(比如 WHERE、ORDER BY、GROUP BY、INTERVAL)時的 last 函數的性能
  • both:同時緩存最近的行和列,即等同于上述 cachemodel 值為 last_row 和 last_value 的行為同時生效

當使用數據庫讀緩存時,可以使用參數 cachesize 來配置每個 vnode 的內存大小。

  • cachesize:表示每個 vnode 中用于緩存子表最近數據的內存大小。默認為 1,范圍是 [1,65536],單位是 MB。需要根據機器內存合理配置。

關于數據庫的具體創建,相關參數和操作說明請參考創建數據庫

實時數據查詢的緩存實踐

本節以智能電表為例,來詳細看看 LAST 緩存對實時數據查詢的性能提升。首先使用 taosBenchmark 工具,生成本章內容需要的智能電表的時序數據。

# taosBenchmark -d power -Q --start-timestamp=1600000000000 --tables=10000 --records=10000 --time-step=10000 -y

上面的命令,taosBenchmark 工具在 TDengine 中生成了一個用于測試的 電表數據庫 power,產生共 10 億條時序數據。時序數據的時間戳從 1600000000000(2020-09-13T20:26:40+08:00) 開始,超級表為 meters,包含 10000 個設備(子表),每個設備有 10000 條數據,時序數據的采集頻率是 10 秒/條。

查詢任意一個電表的最新的電流和時間戳數據,執行如下 SQL

taos> select last(ts, current) from meters;last(ts)         |    last(current)     |
=================================================2020-09-15 00:13:10.000 |            1.1294620 |
Query OK, 1 row(s) in set (0.353815s)taos> select last_row(ts, current) from meters;last_row(ts)       |  last_row(current)   |
=================================================2020-09-15 00:13:10.000 |            1.1294620 |
Query OK, 1 row(s) in set (0.344070s)

希望使用緩存來查詢任意一個電表的最新時間戳數據,執行如下 SQL,并檢查數據庫的緩存生效。

taos> alter database power cachemodel 'both' ;
Query OK, 0 row(s) affected (0.046092s)taos> show create database power\G;
*************************** 1.row ***************************Database: power
Create Database: CREATE DATABASE `power` BUFFER 256 CACHESIZE 1 CACHEMODEL 'both' COMP 2 DURATION 14400m WAL_FSYNC_PERIOD 3000 MAXROWS 4096 MINROWS 100 STT_TRIGGER 2 KEEP 5256000m,5256000m,5256000m PAGES 256 PAGESIZE 4 PRECISION 'ms' REPLICA 1 WAL_LEVEL 1 VGROUPS 10 SINGLE_STABLE 0 TABLE_PREFIX 0 TABLE_SUFFIX 0 TSDB_PAGESIZE 4 WAL_RETENTION_PERIOD 3600 WAL_RETENTION_SIZE 0 KEEP_TIME_OFFSET 0
Query OK, 1 row(s) in set (0.000282s)

再次查詢電表的最新的實時數據,第一次查詢會做緩存計算,后續的查詢時延就大大縮減。

taos> select last(ts, current) from meters;last(ts)         |    last(current)     |
=================================================2020-09-15 00:13:10.000 |            1.1294620 |
Query OK, 1 row(s) in set (0.044021s)taos> select last_row(ts, current) from meters;last_row(ts)       |  last_row(current)   |
=================================================2020-09-15 00:13:10.000 |            1.1294620 |
Query OK, 1 row(s) in set (0.046682s)

可以看到查詢的時延從 353/344ms 縮短到了 44ms,提升約 8 倍。

訪問官網

更多內容歡迎訪問 TDengine 官網

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

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

相關文章

YOLO在C#中的完整訓練、驗證與部署方案

YOLO在C#中的完整訓練、驗證與部署方案 C# 在 YOLO 部署上優勢明顯(高性能、易集成),但訓練能力較弱,通常需結合 Python 實現。若項目對開發效率要求高且不依賴 C# 生態,建議全程使用 Python;若需深度集成…

pikachu靶場通關筆記17 CSRF關卡03-CSRF(Token)

目錄 一、CSRF原理 二、CSRF Token 三、源碼分析 四、CSRF Token tracker插件 1、插件簡介 2、插件安裝 五、滲透實戰 1、用戶登錄 2、修改個人信息 3、bp攔截報文 4、bp改報文探測 5、配置CSRF-Token-Tracer 6、bp改包成功 7、查看CSRF Token Tracker配置 本系…

C#面試問題81-100

85. What are anonymous types? 匿名類型是在需要的地方直接定義的類型,甚至都 不給它命名。它非常適合我們這種用例——類型小且臨時,而且我們無意在其 他地方使用它 匿名類型是直接從 System.Object 派生的類對象。它們不能轉換為任何 其他類型。●…

【Ragflow】25.Ragflow-plus開發日志:excel文件解析新思路/公式解析適配

引言 RagflowPlus v0.3.0 版本中,增加了對excel文件的解析支持,但收到反饋,說效果并不佳。 以下測試文件內容來自群友反饋提供,數據已脫敏處理。 經系統解析后,分塊效果如下: 可以看到,由于該…

VS2022下C++ Boost庫安裝與使用使用

一.Boost概述 1.簡介 Boost 是一個廣泛使用的 C 庫集合,提供了許多高質量、可移植、高效的工具和組件,被視為 C 標準庫的延伸。自 1998 年成立以來,Boost 已成為 C 社區的核心資源,許多 Boost 庫通過實踐驗證后被納入 C 標準&am…

內嵌式mqtt server

添加moquette依賴 <dependency><groupId>io.moquette</groupId><artifactId>moquette-broker</artifactId><version>0.17</version><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>…

php執行后報502,無錯誤提示的排查和解決

文章目錄 一、闡述問題二、開始排查1.執行代碼展示2.PHP層面排查問題3.系統層面排查問題1. 分析系統日志2. core dump 分析2.1 core dump 是什么2.2 core dump 配置 并 生成 core 文件2.3 gdb 解析 core 文件 4. 問題解決 三、贈送內容四、總結 一、闡述問題 這個問題花了我起…

MySQL 核心知識點解析

最近正在復習Java八股&#xff0c;所以會將一些熱門的八股問題&#xff0c;結合ai與自身理解寫成博客便于記憶 InnoDB 和 MyISAM 的區別 特性InnoDBMyISAM事務支持支持ACID事務不支持事務鎖機制行級鎖表級鎖外鍵支持支持不支持崩潰恢復有crash-safe能力無存儲結構聚簇索引非…

CppCon 2015 學習:Comparison is not simple, but it can be simpler.

What is comparison? 這段文字是從計算機科學、編譯器設計或系統優化的角度來定義和評價“比較&#xff08;comparison&#xff09;”這個操作&#xff1a; 1. Pervasive&#xff08;無處不在&#xff09; 比較操作在編程中極為常見&#xff0c;存在于&#xff1a; 分支語句&…

RocketMQ入門5.3.2版本(基于java、SpringBoot操作)

一、RocketMQ概述 RocketMQ是一款由阿里巴巴于2012年開源的分布式消息中間件&#xff0c;旨在提供高吞吐量、高可靠性的消息傳遞服務。主要特點有&#xff1a; 靈活的可擴展性 海量消息堆積能力 支持順序消息 支持多種消息過濾方式 支持事務消息 支持回溯消費 支持延時消…

VR線上展廳特點分析與優勢

VR線上展廳&#xff1a;特點、優勢與實際應用 VR線上展廳&#xff0c;作為虛擬現實&#xff08;VR&#xff09;技術在展示行業的創新應用&#xff0c;正逐步改變著傳統的展覽方式。通過模擬真實的物理環境&#xff0c;為參觀者提供身臨其境的展覽體驗&#xff0c;成為展示行業…

QT 5.9.2+VTK8.0實現等高線繪制

項目下載鏈接&#xff1a;QT5.9.2VTK8.0實現等高線繪制資源-CSDN文庫 示例如下&#xff1a; 主要代碼如下&#xff1a; #include "vtkRenderer.h" #include "vtkRenderWindow.h" #include "vtkRenderWindowInteractor.h" #include "vtkPo…

MySQL:忘記root密碼

修改配置文件&#xff1a; vi /etc/my.cnf## 修改配置文件 ##[mysqld] skip - grant - tables## 重啟 ##/etc/init.d/mysqld restart ## 或service mysqld restart## 登錄mysqld -u root -p -h 127.0.0.1USE mysql; UPDATE user SET Password password(123456) WHERE User r…

JSP、HTML和Tomcat

9x9上三角乘法表 乘法表的實現 <% page contentType"text/html;charsetUTF-8" language"java" %> <!DOCTYPE html> <html> <head><title>99 上三角乘法表</title><style>body {font-family: monospace;padding…

常用枚舉技巧:基礎(一)

文章目錄 常用枚舉技巧&#xff1a;基礎&#xff08;一&#xff09;LeetCode 1. 兩數之和思路Golang 代碼 LeetCode 2441. 與對應負數同時存在的最大正整數思路Golang 代碼 LeetCode 1512. 好數對的數目思路Golang 代碼 LeetCode 2001. 可互換矩形的對數思路Golang 代碼 LeetCo…

從混亂到秩序:探索管理系統如何徹底改變工作流程

內容摘要 在許多企業與組織中&#xff0c;工作流程混亂是阻礙發展的“絆腳石”。員工們常常被繁瑣的步驟、模糊的職責和溝通不暢等問題搞得焦頭爛額&#xff0c;工作效率低下&#xff0c;錯誤頻發。而與之形成鮮明對比的是&#xff0c;一些引入了先進管理系統的團隊&#xff0…

使用SSE解決獲取狀態不一致問題

使用SSE解決獲取狀態不一致問題 1. 問題描述2. SSE介紹2.1 SSE 的工作原理2.2 SSE 的事件格式規范2.3 SSE與其他技術對比2.4 SSE 的優缺點 3. 實戰代碼 1. 問題描述 目前做的一個功能是上傳多個文件&#xff0c;這個上傳文件是整體功能的一部分&#xff0c;文件在上傳的過程中…

華為×小鵬戰略合作:破局智能駕駛深水區的商業邏輯深度解析

當中國智能電動車競爭進入下半場&#xff0c;頭部玩家的合縱連橫正在重構產業格局。華為與小鵬汽車近日官宣的“戰略合作”&#xff0c;表面看是技術互補的常規操作&#xff0c;實則暗藏改寫行業游戲規則的深層商業邏輯。 一、技術破壁&#xff1a;從“單點突破”到“全棧協同”…

Tailwind CSS 實戰:基于 Kooboo 構建 AI 對話框頁面(六):圖片上傳交互功能

在 《Tailwind CSS 實戰&#xff1a;基于 Kooboo 構建 AI 對話框頁面&#xff08;五&#xff09;》 中&#xff0c;完成了語音交互功能的優化。本文作為該系列教程的第六篇&#xff0c;將聚焦于圖片上傳功能的開發。通過集成圖片上傳與預覽能力&#xff0c;我們將進一步完善 AI…

40. 自動化異步測試開發之編寫異步業務函數、測試函數和測試類(類寫法)

40. 自動化異步測試開發之編寫異步業務函數、測試函數和測試類&#xff08;類寫法&#xff09; 一、類結構設計解析 1.1 基類設計 class Base:async_driver None # &#x1f697; 存儲瀏覽器驅動實例async def get(self, url: str http://secure.smartbearsoftware.com/.…