新闻

时序数据库到底难在哪?

2022.05.27

本文摘自 DolphinDB CEO 周小华博士在知乎问题“时序数据库技术难度如何?”下的回答。

近几年,时序数据库(time-series database)一直是数据库领域的热点,海量时序数据的新解决方案、项目和基础工具都在蓬勃发展。从金融市场交易物联网领域的传感器测量,从网络服务器监控人体健康监测等,时间序列数据遍布各种场景。

一款优秀的高性能时序数据库可以帮助决策者充分挖掘海量数据价值,助力企业和用户的实时商业决策,从而真正做到掌握过去、了解现在和预测未来。

那么,时序数据库的实现难度如何?在技术路线的选择上又有哪些考量呢?

DB-Engines 最新发布的2022年5月时序数据库排名榜单中,国产时序数据库 DolphinDB 保持第9名,也是目前唯一排名前10的国产时序数据库。

时序数据库的技术难度

时序数据库由于其数据的自身特点、场景的复杂多变,以及场景特点在技术实现上的相互冲突,在工程实现上具有较高的难度。

时序数据库特点

与交易型关系数据库(OLTP)相比,时序数据库(TSDB)通常有以下几个特点:

  • 数据规模:由于多了时间的维度,数据量高出3-4个数量级
  • 数据写入:在一个时间截面上的写入吞吐量更高,但时延要求通常较低;
  • 数据查询:TSDB 通常是时间序列查询,而 OLTP 通常是单点查询;
  • 数据删除:TSDB 通常会批量删除过期数据,而 OLTP 通常是删除某一条记录;
  • 数据分析:TSDB 不仅统计分析单个序列,更要挖掘序列之间的关系、处理实时流数据

场景复杂多变

TSDB的诸多特点在设计时都可以充分利用,但现实场景中,普遍情况往往也会出现变化,这就要求开发者们考虑得更全面:

  • 例如,大部分时候,一个序列的数据都是按时间顺序写入,但也会出现因网络延迟、重写等因素导致的时间乱序;
  • 再如,在 IoT、APM 等场景下,数据采集频率通常是固定的,但在交易流水、网络监控等场景,数据采集的频率波动会很大;
  • 此外,在金融等高价值密度数据场景下,数据写入后的反复读取和分析也是一项重要需求。

技术实现的冲突

事实上,有不少时序数据的场景和特点的技术实现是相互冲突的,这也增加了 TSDB 实现的难度:

  • TSDB 最高频的需求是快速读取某一个序列的数据,对此最好的存储模型是一个序列一个文件,但这就意味着每秒钟打开的文件数量取决于测点数量,效率之低可以预见;
  • 如果仅满足时序分析的需求,只要按照序列建模就可以了,但深入的统计分析或数据挖掘则更需要关注不同序列之间的关系
  • 如果希望写入性能好,append only 模式当然最佳,但这样一来乱序数据和重复数据就会成为新的问题。

时序数据库的技术路线选择

从 NoSQL 的蓬勃发展到 NewSQL 的迎头赶上和超越,数据库的发展历程其实已经告诉我们:解决吞吐量固然重要,但用户的最大诉求依然是稳定可靠、易用好用、计算简便、运维简单

从用户角度出发,决定技术难度的选择点主要有三个:(1)是否支持事务;(2)分布式一致性的选择;(3)对数据分析的支持程度。不同技术路线的选择会直接影响到时序数据库的适用场景:

  • 选择弱一致性模型,会对数据库运维提出高要求,给开发增加额外负担;
  • 选择不支持事务,则会对应用场景和客户端产生限制。

而 TSDB 如果选择像分布式关系数据库一样,支持强一致性、支持事务,同时还要支撑比关系数据库高3~4个量级的数据,并支持更强的数据分析功能,技术难度自然不会低。

我们的选择

DolphinDB 根据时序数据的特点,选择了一条较难的技术路径——以 LSM Tree 为原型自研 TSDB 存储引擎。在 DolphinDB 中,数据分区、分布式一致性和高可用,以及分布式事务在整个数据库集群层面实现,与存储引擎独立。

主要功能特点:

  • 支持按指定的键值(tag)字段分块存储。每个块内部按指定的字段(通常是时间)排序,支持每个块的稀疏索引
  • 支持单值和多值数据模型
  • 支持数据去重或不去重
  • 支持通过插入一条记录来快速更新数据
  • 支持乱序写入
  • 支持数据压缩
  • 支持数据的 TTL 和分级存储
  • 除常规数据类型外,还支持数组类型和 BLOB 类型
  • 支持对键值字段进行映射,以解决序列高基数的问题
  • 支持事务 ACID,包括原子性和快照级别隔离
  • 通过标准读写接口对外服务,实现读写分离

DolphinDB集群:

  • 控制节点:负责元数据和分布式基础设施
  • 数据节点:存储引擎以及计算引擎
  • 计算节点:计算引擎(多范式编程语言、1400+函数库、批处理引擎、流处理引擎)
  • 代理节点:负责数据节点和计算节点的启停

可以确定的是,随着 TSDB 的适用行业和场景越来越广,应用的深度和复杂性也会随 TSDB 的普及而增加。对此感兴趣的小伙伴们可以查阅我们的用户手册和相关教程,也可以前往知乎原回答下与 Davis 交流互动哦~