時序資料庫TimescaleDB 功能介紹、單節點、集群安裝部署、centos、linux

来源:https://www.cnblogs.com/wchb/archive/2023/08/15/17631334.html
-Advertisement-
Play Games

簡介 Timescale Documentation | Getting started with Timescale Timescale是一個用於時間序列,事件和分析的PostgreSQL數據平臺。 提供了PostgreSQL的可靠性,這是時間序列的超能力 TimescaleDB,。它提供 自動備 ...


簡介

Timescale Documentation | Getting started with Timescale

Timescale是一個用於時間序列,事件和分析的PostgreSQL數據平臺。 提供了PostgreSQL的可靠性,這是時間序列的超能力 TimescaleDB,。它提供 自動備份和還原、複製的高可用性等功能, 無縫縮放和調整大小等等

性能對比:TimescaleDB vs. InfluxDB:專為時間序列數據構建

優勢

  1. 優化的查詢性能:TimescaleDB 使用了分區和數據分片技術,將數據分散到多個分區中,從而可以並行處理查詢操作。這使得查詢性能得到顯著提升,特別是在大數據量的情況下。
  2. 無縫集成:TimescaleDB 是基於 PostgreSQL 構建的擴展,因此可以輕鬆地與現有的 PostgreSQL 生態系統集成。你可以繼續使用 PostgreSQL 的功能,同時獲得時間序列數據處理的優勢。
  3. 連續聚合:連續聚合是 TimescaleDB 的一個強大特性,它允許在數據插入的同時計算和維護聚合數據,從而大大減少了後續查詢的計算成本。
  4. 自動數據分層:TimescaleDB 支持數據分層,可以將歷史數據分為不同的層級,從而更有效地管理長期存儲的數據。這有助於在保持查詢性能的同時控制存儲成本。
  5. 高可用性和容錯性:TimescaleDB 支持在集群中複製數據以實現高可用性和容錯性。你可以設置主從複製或多節點集群來確保數據的可靠性和持續性。
  6. 豐富的時間序列函數和操作:TimescaleDB 提供了許多針對時間序列數據的內置函數和操作,使你可以輕鬆地進行時間序列分析和操作。
  7. 社區支持和活躍度:TimescaleDB 擁有一個活躍的開源社區,不斷更新和改進,同時提供文檔和支持,使用戶能夠更好地使用和理解該技術。
  8. 可擴展性:由於 TimescaleDB 基於 PostgreSQL,因此它繼承了 PostgreSQL 的可擴展性特性。你可以根據需要調整硬體和配置,以適應不斷增長的數據量和查詢負載

 

術語

Hypertables(超級表)

它將時間序列數據根據時間進行分區和組織,從而實現更高效的查詢性能

distributed hypertable(分散式超表)

使用空間分區,將數據分佈存儲在多個數據節點上

Chunks(塊)

TimescaleDB自動將Hypertable分割成塊,每個塊對應於一個特定的時間間隔和一個分區鍵。這些分區是不重合的,這有助於查詢器進行查詢

連續聚合

連續聚集表是TimescaleDB的一個重要特性,它可以在後臺自動維護預定義的聚合數據。通過使用連續聚集表,可以極大地提高大規模時序數據的查詢性能

核心概念

數據模型

PostgreSQL JSON和JSONB:如果您正在使用半結構化數據,例如來自 IoT 感測器的讀數 如果收集不同的測量值,您可能需要靈活的架構。在此 在這種情況下,您可以使用PostgreSQL JSON和JSONB數據類型。

 

關係型:固定模式的關係數據結構

 

由於Timescale底層基於PostgreSQL做數據存儲,不僅支持普通的PostgreSQL表,還支持超表,超表是Timescale對時間序列數據存儲和查詢的優化。

普通表

普通的PostgreSQL表

超表(Hypertables)

超表是專門為時間序列數據設計的,一個 超級表始終按時分區,但也可以在 其他列也是如此。超表的另一個特別之處在於 它們被分解為稱為塊的較小表

分散式超表

分散式超表是跨多個節點的超表,分散式超表用於多節點群集。每個集群都有一個 訪問節點和多個數據節點。您可以使用 訪問節點,並且數據存儲在數據節點上

超級表的每個區塊僅保存特定時間範圍的數據。當你 插入尚未具有區塊的時間範圍(時間刻度)的數據 自動創建一個區塊來存儲它。

 

完整的 SQL

Timescale 支持完整的 SQL,因此無需學習自定義查詢語言

數據插入

提供並行複製工具 ,支持多種數據導入:標準sql-insert寫入、Prometheus 、Kafka 、.csv文件導入

連續聚合

連續聚集表是TimescaleDB的一個重要特性,它可以在後臺自動維護預定義的聚合數據。通過使用連續聚集表,可以極大地提高大規模時序數據的查詢性能

 

物化視圖

是一個標準的PostgreSQL函數。 它們用於緩存複雜查詢的結果,以便您可以重用它 後來。實例化視圖不會定期更新,但您可以手動更新 根據需要刷新它們

連續聚合

自動更新的物化視圖

實時聚合

即在查詢時將聚合數據和原始數據結合起來,以獲得新的結果,連續聚合視圖預設開啟了實時聚合,如果關閉,則在查詢的時候,只會查詢已經物化的數據。

聚合函數

函數允許您將數據聚合到 時間桶,例如:5 分鐘、1 小時或 3 天。TimescaleDB提供了一系列內置的時間序列聚合函數,用於計算給定時間範圍內的統計信息,如平均值、最大值、最小值等。

 

例子:在名為 的表中計算每日平均溫度。該表具有一個名為的時間列和一列:weather_conditions、 time 、temperature

SELECT time_bucket('1 day', time) AS bucket,
  avg(temperature) AS avg_temp
FROM weather_conditions
GROUP BY bucket
ORDER BY bucket ASC;

 

超函數

超函數是一組專門的函數,允許您 分析時間序列數據。您可以使用超函數來分析任何內容 已存儲為時間序列數據,包括物聯網設備、IT 系統、營銷 分析、用戶行為、財務指標和加密貨幣。

超函數允許您快速執行關鍵的時間序列查詢, 分析時間序列數據,並提取有意義的信息。他們的目標是 識別、構建和組合 SQL 需要執行的所有功能 將時間序列分析到單個擴展

 

存儲管理

分區

 

時間分區:

當創建和使用超級表時,它會自動按時間對數據進行分區, 並可選擇按空間分區

每個超級表都由稱為塊的子表組成。分配的每個塊 時間範圍,並且僅包含該範圍的數據。預設情況下,每個區塊包含 7 天,可以通過chunk_time_interval來進行設置。分散式超表預設使用空間分區。

 

空間分區

建議對分散式超級表使用空間分區,以實現高效的橫向擴展性能。對於僅存 在於單個節點上的常規超表,額外的分區可用於特殊用例,不建議大多數用戶使用

空間分區使用散列:每個不同的項目都被散列到 N 個存儲桶之一。請記住,我們已經在使用(靈活的)時間間隔來管理塊大小;空間分區的主要目的是在同一時間間隔內跨多個數據節點(在分散式超級表的情況下)或跨多個磁碟(在單節點部署的情況下)實現並行化

壓縮

壓縮時序數據可以進一步減少區塊大小 超過90%。這樣可以節省存儲成本,並使查詢保持運行 閃電般的速度。

支持按照時間進行自動壓縮和手動壓縮和解壓,在查詢期間,未壓縮的塊將被正常處理,而來自壓縮塊的數據將在查詢時首先被解壓縮並轉換為標準行格式

 

數據保留

可幫助您通過刪除舊數據來節省存儲成本。您可以 將數據保留與連續聚合相結合,以降低您的採樣數據。

在時間序列應用程式中,隨著數據年齡的增長,數據通常變得不那麼有用。如果 您不需要您的歷史數據,您可以在達到一定數據後將其刪除 年齡。Timescale 允許您設置自動數據保留策略以丟棄舊數據。你 還可以通過手動刪除塊來微調數據保留。

通常,您希望保留歷史數據的摘要,但不需要 原始數據。您可以通過將數據保留與連續聚合相結合來對舊數據進行縮減採樣。

 

數據分層(雲端體驗版)

通過將數據分層到低成本對象存儲層(S3)來節省存儲成本

 

 

備份還原

支持PostgreSQL提供的相關功能

 

複製和副本功能

TimescaleDB支持複製和副本功能,可以在多個節點上創建超級表的副本,實現數據冗餘和高可用性

 

高可用

TimescaleDB 的多節點安裝可以高度可用 通過為群集中的每個節點設置一個或多個備用節點,或者通過 在區塊級別本機複製數據。

 

限制

局限性

雖然Timescale通常提供的功能超出了範圍 PostgreSQL提供,使用超表有一些限制, 特別是分散式超表。本節文檔 同時使用常規和分散式時的常見限制 超級表。

超表限制

  • 不支持引用超表的外鍵約束。
  • 用於分區的時間維度(列)不能具有 NULL 值。
  • 唯一索引必須包括正在分區的所有列 尺寸。
  • UPDATE在分區(塊)之間移動值的語句不是 支持。這包括更新插入 ()。INSERT ... ON CONFLICT UPDATE

分散式超表限制

常規超表的所有限制也適用於分散式 超級表。此外,以下限制特別適用 到分散式超表:

  • 不支持後臺作業的分散式調度。後臺作業 在訪問節點上創建的內容在此訪問節點上調度和執行 無需將作業分發到數據節點。
  • 連續聚合可以聚合分佈在數據節點上的數據,但 連續聚合本身必須位於訪問節點上。這可以 對可以擴展安裝的程度進行限制,但因為 連續聚合是數據的下採樣,這通常不是 製造問題。
  • 不支持對區塊重新排序。
  • 表空間不能附加到訪問上的分散式超表 節點。仍然可以在數據節點上附加表空間。
  • 假定角色和許可權在 分散式資料庫,但不強制實施一致性。
  • 不支持在數據節點上進行聯接。使用 加入分散式超表 另一個表要求另一個表駐留在訪問節點上。這 還會限制分散式超表上的聯接性能。
  • 分散式超表中外鍵約束引用的表 必須存在於訪問節點和所有數據節點上。這也適用於 引用的值。
  • 不支持並行感知掃描和追加。
  • 分散式超表本身不提供一致的還原點 用於跨節點備份和還原。使用 create_distributed_restore_point 命令,並確保在將單個備份還原到 訪問和數據節點。
  • 有關本機複製限制,請參閱本機複製部分
  • 用戶定義的函數必須手動安裝在數據節點上,以便 函數定義在訪問節點和數據節點上都可用。 這對於註冊到 的函數尤其相關。set_integer_now_func

請註意,這些限制涉及訪問節點的使用。一些 當前不支持的功能可能仍適用於單個數據節點, 但這種用法既未經測試,也未得到官方支持。未來版本 的時間尺度可能會消除其中一些限制。

安裝單節點

添加 PostgreSQL 第三方存儲庫

 

yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm

創建 TimescaleDB 存儲庫

tee /etc/yum.repos.d/timescale_timescaledb.repo <<EOL
[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/$(rpm -E %{rhel})/\$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
EOL

更新本地存儲庫列表:

yum update

安裝TimescaleDB資料庫:

yum install timescaledb-2-postgresql-14

初始化資料庫:

/usr/pgsql-14/bin/postgresql-14-setup initdb

#使用timescaledb-tune腳本配置資料庫完成安裝後,您需要配置資料庫以便可以使用它。
#最簡單的方法是運行timescaledb-tune 腳本,它包含在timescaledb-tools軟體包中
timescaledb-tune --pg-config=/usr/pgsql-14/bin/pg_config --quiet --yes

配置PostgreSQL

vim /var/lib/pgsql/14/data/postgresql.conf
將#port=5432前面的#刪除
將#listen_addresses = 'localhost'改成listen_addresses = '*'

vim /var/lib/pgsql/14/data/pg_hba.conf
在最後面添加一行如下代碼,然後保存
host    all             all             0.0.0.0/0               trust

啟動PostgreSQL

systemctl enable postgresql-14
systemctl start postgresql-14

## 查看狀態
systemctl status postgresql-14

修改postgres賬號的密碼

# 切換到postgres用戶
su - postgres

# 登錄資料庫
psql

# 修改密碼
alter user postgres password '新的密碼';

重啟服務

sudo systemctl restart postgresql-14.service

時序資料庫構建

su - postgres
# 創建庫或直接使用postgres庫
createdb mydatabase

# 連接到該資料庫
psql mydatabase

# 在資料庫中載入 TimescaleDB 擴展
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

超級表創建

-- 鏈接資料庫
psql -U postgres -h localhost -d mydatabase

-- 創建超級表
CREATE TABLE conditions (
    time        TIMESTAMPTZ       NOT NULL,
    location    TEXT              NOT NULL,
    temperature DOUBLE PRECISION  NULL,
    humidity    DOUBLE PRECISION  NULL
);

-- 對超級表進行分區
SELECT create_hypertable('conditions', 'time');

SELECT create_hypertable('需要使用時序資料庫的表名', '時間索引欄位');

搭建集群

圖顯示了訪問節點 (AN) 如何對同一中的數據進行分區 跨多個數據節點(DN1、DN2 和 DN3)

 

節點劃分

訪問節點AN、數據節點DN

修改資料庫配置:

vim /var/lib/pgsql/14/data/postgresql.conf
 
# 訪問節點AN
max_prepared_transactions = 500
enable_partitionwise_aggregate = on
jit = off
# 數據節點DN
max_prepared_transactions = 500
wal_level = logical

添加數據節點

# 連接訪問節點資料庫
psql -U postgres -h localhost -d mydatabase

## 添加數據節點
SELECT add_data_node('dn1','172.31.90.74','mydatabase',5432,false,true,'postgres');
SELECT add_data_node('dn2','172.31.82.237','mydatabase',5432,false,true,'postgres');

此時Timescaledb集群就搭建成功了

創建分散式超表(AN訪問節點)

# 創建表
CREATE TABLE test2 (
                       time        TIMESTAMPTZ       NOT NULL,
                       location    TEXT              NOT NULL,
                       temperature DOUBLE PRECISION  NULL,
                       humidity    DOUBLE PRECISION  NULL
);
# 創建分散式超表,預設使用所有數據節點
SELECT create_distributed_hypertable('test2', 'time', 'location');

# 插入數據
INSERT INTO test2 VALUES ('2020-12-14 13:45', 1, '1.2');

#給表增加數據節點
SELECT detach_data_node('dn1', 'test2');

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ## 固件升級方案綜述 單片機的固件升級方式有很多種, 1、ICP:In Circuit Programing,簡單說就是在單片機開發時使用燒錄器升級程式,比如使用J-Link燒錄單片機程式。 2、ISP:In System Programing,在單片機內部實現了基於通信介面(如串口、I2C、SP ...
  • 開始之前簡單講下源和包管理器的概念,個人理解如下: 源就是平時我們win電腦上的360軟體管家、騰訊軟體管家、微軟商店這個意思,提供下載各類軟體包、安裝包的平臺; 包管理器就是win電腦上各類軟體的安裝包,例如qq.exe、360.msi等,需要下載後用指定的命令可以進行安裝、協助等操作,跟源配合使 ...
  • ## [Ooonly] 前情提要:需要刷寫一整個app程式,分包刷寫,每包位元組數為單數,要求CRC校驗正確。(晶元底層提供32位全字刷寫和16位半字刷寫,驅動只整合了32位全字刷寫函數) 使用32位刷寫函數出現的現象:通過keil5觀察記憶體空間發現一包刷寫成功一包刷寫失敗一包刷寫成功...一直迴圈到 ...
  • 提要:本系列文章主要參考`MIT 6.828課程`以及兩本書籍`《深入理解Linux內核》` `《深入Linux內核架構》`對Linux內核內容進行總結。 記憶體管理的實現覆蓋了多個領域: 1. 記憶體中的物理記憶體頁的管理 2. 分配大塊記憶體的伙伴系統 3. 分配較小記憶體的slab、slub、slob分 ...
  • 本文將詳細介紹如何發佈.NET Core項目到IIS伺服器。首先,第一步需要安裝IIS,介紹了在本地電腦和伺服器中進行安裝。然後需要安裝SDK和運行時才能發佈.NETCore項目。其次介紹瞭如何發佈.NETCore項目和Vue項目,並配置IIS。最後介紹瞭如何將項目部署到Service服務中。 ...
  • ![](https://img2023.cnblogs.com/blog/3076680/202308/3076680-20230815092340479-67825278.png) # 1. 事務日誌 ## 1.1. 事務日誌有助於提高事務的效率 ### 1.1.1. 存儲引擎只需要更改記憶體中的數 ...
  • # mysql複製技術/mysql集群 ![](https://img2023.cnblogs.com/blog/3165277/202308/3165277-20230815183932805-1063237772.png) ## 準備 1.四台虛擬機都關閉防火牆 ``` systemctl st ...
  • 最近系統有個需求,希望工作流的審批人被催辦後就要置頂在最前面, 工作流列表我是用es的,一開始想用pinned實現,但用pinned的話,每頁都會置頂在前面,我的需求只是想讓他優先排在前面,翻頁後正常顯示 後面找到這個,通過把匹配到數據的分數提高,然後用sort進行排序,就能實現我的需求了 GET ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...