TimescaleDB開源時序數(shù)據(jù)庫
TimescaleDB 是基于 PostgreSQL 數(shù)據(jù)庫開發(fā)的一款時序數(shù)據(jù)庫,以插件化的形式打包提供,隨著 PostgreSQL 的版本升級而升級,不會因為另立分支帶來麻煩。
TimescaleDB 架構(gòu)
數(shù)據(jù)自動按時間和空間分片(chunk)
TimescaleDB 具有以下特點
1. 基于時序優(yōu)化
2. 自動分片(自動按時間、空間分片(chunk))
3. 全 SQL 接口
4. 支持垂直于橫向擴(kuò)展
5. 支持時間維度、空間維度自動分區(qū)。空間維度指屬性字段(例如傳感器 ID,用戶 ID 等)
6. 支持多個 SERVER,多個 CHUNK 的并行查詢。分區(qū)在 TimescaleDB 中被稱為 chunk。
7. 自動調(diào)整 CHUNK 的大小
8. 內(nèi)部寫優(yōu)化(批量提交、內(nèi)存索引、事務(wù)支持、數(shù)據(jù)倒灌)。
內(nèi)存索引,因為 chunk size 比較適中,所以索引基本上都不會被交換出去,寫性能比較好。
數(shù)據(jù)倒灌,因為有些傳感器的數(shù)據(jù)可能寫入延遲,導(dǎo)致需要寫以前的 chunk,timescaleDB 允許這樣的事情發(fā)生(可配置)。
9. 復(fù)雜查詢優(yōu)化(根據(jù)查詢條件自動選擇 chunk,最近值獲取優(yōu)化(最小化的掃描,類似遞歸收斂),limit 子句 pushdown 到不同的 server,chunks,并行的聚合操作)
10. 利用已有的 PostgreSQL 特性(支持 GIS,JOIN 等),方便的管理(流復(fù)制、PITR)
11. 支持自動的按時間保留策略(自動刪除過舊數(shù)據(jù))
示例代碼
Creating a hypertable
-- We start by creating a regular SQL table
CREATE TABLE conditions (
time TIMESTAMPTZ NOT NULL,
location TEXT NOT NULL,
temperature DOUBLE PRECISION NULL,
humidity DOUBLE PRECISION NULL
);
-- Then we convert it into a hypertable that is partitioned by time
SELECT create_hypertable('conditions', 'time');