TimescaleDB開源時(shí)序數(shù)據(jù)庫(kù)
TimescaleDB 是基于 PostgreSQL 數(shù)據(jù)庫(kù)開發(fā)的一款時(shí)序數(shù)據(jù)庫(kù),以插件化的形式打包提供,隨著 PostgreSQL 的版本升級(jí)而升級(jí),不會(huì)因?yàn)榱砹⒎种砺闊?br>
TimescaleDB 架構(gòu)
數(shù)據(jù)自動(dòng)按時(shí)間和空間分片(chunk)
TimescaleDB 具有以下特點(diǎn)
1. 基于時(shí)序優(yōu)化
2. 自動(dòng)分片(自動(dòng)按時(shí)間、空間分片(chunk))
3. 全 SQL 接口
4. 支持垂直于橫向擴(kuò)展
5. 支持時(shí)間維度、空間維度自動(dòng)分區(qū)??臻g維度指屬性字段(例如傳感器 ID,用戶 ID 等)
6. 支持多個(gè) SERVER,多個(gè) CHUNK 的并行查詢。分區(qū)在 TimescaleDB 中被稱為 chunk。
7. 自動(dòng)調(diào)整 CHUNK 的大小
8. 內(nèi)部寫優(yōu)化(批量提交、內(nèi)存索引、事務(wù)支持、數(shù)據(jù)倒灌)。
內(nèi)存索引,因?yàn)?chunk size 比較適中,所以索引基本上都不會(huì)被交換出去,寫性能比較好。
數(shù)據(jù)倒灌,因?yàn)橛行﹤鞲衅鞯臄?shù)據(jù)可能寫入延遲,導(dǎo)致需要寫以前的 chunk,timescaleDB 允許這樣的事情發(fā)生(可配置)。
9. 復(fù)雜查詢優(yōu)化(根據(jù)查詢條件自動(dòng)選擇 chunk,最近值獲取優(yōu)化(最小化的掃描,類似遞歸收斂),limit 子句 pushdown 到不同的 server,chunks,并行的聚合操作)
10. 利用已有的 PostgreSQL 特性(支持 GIS,JOIN 等),方便的管理(流復(fù)制、PITR)
11. 支持自動(dòng)的按時(shí)間保留策略(自動(dòng)刪除過舊數(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');