TimescaleDB

TimescaleDB

TimescaleDBTimescale Inc.(成立于2015)开发的一款号称兼容全SQL的时序数据库。它的本质是一个基于PostgreSQL(以下简称PG)的扩展(Extension,主打的卖点如下:

  • SQL支持

  • 背靠PostgreSQL的高可靠性

  • 时序数据的高写入性能

同样的,TimescaleDB开源了其单机版本,而集群版本仅在商业化方案中提供。

背景特性

数据模型

由于TimescaleDB的根基还是PG,因此它的数据模型与NoSQL的时序数据库(如我们的阿里时序时空TSDBInfluxDB)截然不同。在NoSQL的时序数据库中,数据模型通常如下所示,即一条数据中既包括了时间戳以及采集的数据,还包括设备的元数据(通常以Tagset体现。数据模型如下所示:

NoSQL 时序模型

但是在TimescaleDB中,数据模型必须以一个二维表的形式呈现,这就需要用户结合自己使用时序数据的业务场景,自行设计定义二维表。在TimescaleDB的官方文档中,对于如何设计时序数据的数据表,给出了两个范式:Narrow Table、Wide Table。

所谓的Narrow Table就是将metric分开记录,一行记录只包含一个metricValue - timestamp。举例如下:

单值模型

而所谓的Wide Table就是以时间戳为轴线,将同一设备的多个metric记录在同一行,至于设备一些属性(元数据)则只是作为记录的辅助数据,甚至可直接记录在别的表(之后需要时通过JOIN语句进行查询

多值模型

基本上可以认为:Narrow Table对应的就是单值模型,而Wide Table对应的就是多值模型。由于采用的是传统数据库的关系表的模型,所以TimescaleDBmetric值必然是强类型的,它的类型可以是PostgreSQL中的 数值类型,字符串类型 等。

特性

TimescaleDBPostgreSQL的基础之上做了一系列扩展,主要涵盖以下方面:

  • 时序数据表的透明自动分区特性

  • 提供了若干面向时序数据应用场景的特殊SQL接口

  • 针对时序数据的写入和查询对PostgreSQLPlanner进行扩展

  • 面向时序数据表的定制化并行查询

其中34都是在PostgreSQL的现有机制上进行的面向时序数据场景的微创新。12则是TimescaleDB的核心功能。综上所述,由于TimescaleDB完全基于PostgreSQL构建而成,因此它具有若干与生俱来的优势:

  • 100%继承PostgreSQL的生态。且由于完整支持SQL,对于未接触过时序数据的初学者反而更有吸引力

  • 由于PostgreSQL的品质值得信赖,因此TimescaleDB在质量和稳定性上拥有品牌优势

  • ACID支持

当然,它的短板也是显而易见的:

  • 由于只是PostgreSQL的一个Extension,因此它不能从内核/存储层面针对时序数据库的使用场景进行极致优化。

  • 当前的产品架构来看仍然是一个单机库,不能发挥分布式技术的优势。而且数据虽然自动分区,但是由于时间戳决定分区,因此很容易形成I/O热点。

  • 在功能层面,面向时序数据库场景的特性还比较有限。目前更像是一个 传统OLTP数据库+部分时序特性。

不管怎样,TimescaleDB也算是面向时序数据库从另一个角度发起的尝试。在当前时序数据库仍然处于新兴事物的阶段,它未来的发展方向也是值得我们关注并借鉴的。