TimescaleDB - 开源时序数据库


Apache-2.0
跨平台
C/C++

软件简介

TimescaleDB 是基于 PostgreSQL 数据库开发的一款时序数据库,以插件化的形式打包提供,随着 PostgreSQL
的版本升级而升级,不会因为另立分支带来麻烦。

TimescaleDB 架构

数据自动按时间和空间分片(chunk)

TimescaleDB 具有以下特点

1. 基于时序优化

2. 自动分片(自动按时间、空间分片(chunk))

3. 全 SQL 接口

4. 支持垂直于横向扩展

5. 支持时间维度、空间维度自动分区。空间维度指属性字段(例如传感器 ID,用户 ID 等)

6. 支持多个 SERVER,多个 CHUNK 的并行查询。分区在 TimescaleDB 中被称为 chunk。

7. 自动调整 CHUNK 的大小

8. 内部写优化(批量提交、内存索引、事务支持、数据倒灌)。

  • 内存索引,因为 chunk size 比较适中,所以索引基本上都不会被交换出去,写性能比较好。

  • 数据倒灌,因为有些传感器的数据可能写入延迟,导致需要写以前的 chunk,timescaleDB 允许这样的事情发生(可配置)。

9. 复杂查询优化(根据查询条件自动选择 chunk,最近值获取优化(最小化的扫描,类似递归收敛),limit 子句 pushdown 到不同的
server,chunks,并行的聚合操作)

10. 利用已有的 PostgreSQL 特性(支持 GIS,JOIN 等),方便的管理(流复制、PITR)

11. 支持自动的按时间保留策略(自动删除过旧数据)

示例代码

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');