TimescaleDB
TimescaleDB是Timescale Inc.(成立于2015年)开发的一款号称兼容全SQL的时序数据库。它的本质是一个基于PostgreSQL(以下简称PG)的扩展(Extension),主打的卖点如下:
-
全SQL支持
-
背靠PostgreSQL的高可靠性
-
时序数据的高写入性能
同样的,TimescaleDB开源了其单机版本,而集群版本仅在商业化方案中提供。
背景特性
数据模型
由于TimescaleDB的根基还是PG,因此它的数据模型与NoSQL的时序数据库(如我们的阿里时序时空TSDB,InfluxDB等)截然不同。在NoSQL的时序数据库中,数据模型通常如下所示,即一条数据中既包括了时间戳以及采集的数据,还包括设备的元数据(通常以Tagset体现)。数据模型如下所示:
但是在TimescaleDB中,数据模型必须以一个二维表的形式呈现,这就需要用户结合自己使用时序数据的业务场景,自行设计定义二维表。在TimescaleDB的官方文档中,对于如何设计时序数据的数据表,给出了两个范式:Narrow Table、Wide Table。
所谓的Narrow Table就是将metric分开记录,一行记录只包含一个metricValue - timestamp。举例如下:
而所谓的Wide Table就是以时间戳为轴线,将同一设备的多个metric记录在同一行,至于设备一些属性(元数据)则只是作为记录的辅助数据,甚至可直接记录在别的表(之后需要时通过JOIN语句进行查询):
基本上可以认为:Narrow Table对应的就是单值模型,而Wide Table对应的就是多值模型。由于采用的是传统数据库的关系表的模型,所以TimescaleDB的metric值必然是强类型的,它的类型可以是PostgreSQL中的 数值类型,字符串类型 等。
特性
TimescaleDB在PostgreSQL的基础之上做了一系列扩展,主要涵盖以下方面:
其中3和4都是在PostgreSQL的现有机制上进行的面向时序数据场景的微创新。1和2则是TimescaleDB的核心功能。综上所述,由于TimescaleDB完全基于PostgreSQL构建而成,因此它具有若干与生俱来的优势:
当然,它的短板也是显而易见的:
-
由于只是PostgreSQL的一个Extension,因此它不能从内核/存储层面针对时序数据库的使用场景进行极致优化。
-
当前的产品架构来看仍然是一个单机库,不能发挥分布式技术的优势。而且数据虽然自动分区,但是由于时间戳决定分区,因此很容易形成I/O热点。
-
在功能层面,面向时序数据库场景的特性还比较有限。目前更像是一个 传统OLTP数据库+部分时序特性。
不管怎样,TimescaleDB也算是面向时序数据库从另一个角度发起的尝试。在当前时序数据库仍然处于新兴事物的阶段,它未来的发展方向也是值得我们关注并借鉴的。