一、时序数据库应用场景简介
时间序列数据库简称时序数据库(Time Series Database),用于处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间序列数据。
时序数据的几个特点
需要解决的几个问题
时序数据的写入:如何支持每秒钟成千上亿条数据的写入。
时序数据的读取:如何支持在秒级对上亿条数据的分组聚合运算。
成本敏感:海量数据存储带来的成本问题。如何以更低成本存储数据,将成为时序数据库需要解决的重中之重。
常见时序数据库
时序数据库出现的时间较晚,目前较成熟的时序数据库都仅有2、3年的历史。
InfluxDB(单机版免费,集群版收费)最成熟,Kairosdb(底层使用Cassandra),OpenTsdb(底层使用HBase),beringei(Facebook开源),TimeScaleDB(底层基于PostgreSQL),TSDB(百度开源),HiTSDB(阿里开源,底层是PostgreSQL)。
二、常见数据库介绍
(1)InfluxDB
InfluxDB 是由 InfluxData 创建的。它是用 Go 语言编写的自定义、开源、NoSQL 的时间序列数据库。数据存储区提供了一种类似 SQL 的查询语言,称之为 InfluxQL。它的核心是一款定制的存储引擎TSM Tree,对时间序列数据做了优化,优先考虑插入和查询数据的性能,并提供开箱即用的时间序列数学和统计函数。适用于监控、实时分析、物联网、传感器数据等应用场景。是目前最为流行的时间序列数据库。在该数据库中,每个测量结果都包含一个时间戳,以及一组与之关联的标签和一组字段。该字段表示实际测量读取值,而标签表示描述测量的原数据。字段数据类型仅限于 float, int, string 和 boolean,不重写数据就无法更改。标记值被编入索引。他们以字符串表示,无法更新。InfluxDB 入门非常容易,因为你不必担心创建原型或索引。但是,它非常严格死板和受限,无法创建额外的索引、连续字段上的索引、事后更新原数据、强制数据验证等。他并非没有原型。它会根据输入的数据自动创建一个基础模型。InfluxDB 必须自己实现多种容错工具,例如多副本、高可用性和备份/还原,并且要对磁盘的可靠性负责。我们仅限于使用这些工具,并且其中许多功能(如 HA)仅在企业版中可用。InfluxDB 备份工具可以进行完整或增量备份,并且可以用于时间点恢复。InfluxDB 还提供了比 PostgreSQL 和 TimescaleDB 更好的磁盘压缩。
(2)DolphinDB
DolphinDB 是以 C++ 编写的一款分析型的高性能分布式时序数据库,使用高吞吐低延迟的列式内存引擎,集成了功能强大的编程语言和高容量高速度的流数据分析系统,可在数据库中进行复杂的编程和运算,显著减少数据迁移所耗费的时间。
DolphinDB 通过内存引擎、数据本地化、细粒度数据分区和并行计算实现高速的分布式计算,内置流水线、 Map Reduce 和迭代计算等多种计算框架,使用内嵌的分布式文件系统自动管理分区数据及其副本,为分布式计算提供负载均衡和容错能力。
DolphinDB 支持类标准 SQL 的语法,提供类似于 Python 的脚本语言对数据进行操作,也提供其它常用编程语言的 API,在金融领域中的历史数据分析建模与实时流数据处理,以及物联网领域中的海量传感器数据处理与实时分析等场景中表现出色。
DolphinDB主要有三大功能组成:1)分析型数据库2)脚本语言-类sql 3)分布式计算框架,这三大功能全部整合在一个DolphinDB实例中。
分析型数据库:基于内存的列式分析型数据库,没有传统RDBMS的bufferpool、锁表等overhead,直接操作内存,速度极快,特别适合分析类。支持两层数据分区,水平分片到多个节点上,节点内再可以继续分片。数据压缩存储时间序列处理功能,拓展的时间数据类型、基于向量的函数、拓展的SQL语言等特性使得时间序列处理极其方便。
脚本语言:DolphinDB内置基于向量的的脚本语言,语法和Python类似,表达能力极强,可以直接在里面写SQL语句,可以说是SQL和Python的融合。支持数据类型包括数组,非连续大数组(充分利用内存碎片),矩阵,集合,字典,表,元组。DolphinDB的脚本语言还支持函数式编程,支持高阶函数,用户自定义函数,匿名函数,lambda表达式,部分应用,闭包,纯函数以及远程函数调用。内置的大量模板函数可以大大简化数据处理。支持动态加载C++编写的插件文档齐全支持常用的统计和机器学习模型脚本语言直提交到DolphinDB实例上执行。
分布式计算框架:支持map-reduce,迭代计算模型,p2p架构,分布式应用开发速度快,用户自定义函数不需要向Spark那样到处上传,DolphinDB内部直接分发编译好的用户自定义函数到集群中。
为什么比Spark快?
DolphinDB通过以下方法优化系统性能:
(1)用C/C++开发,没有GC,比用Java开发的程序速度更快。
(2)DolphinDB使用线程池而不是进程来实现多用户和并行计算的问题,开销更小,速度更快。
(3)DolphinDB采用非常扁平化的设计,使绝大多数计算和查询在1~2个模块中就可以完成,避免或减少数据在不同系统、组件、模块之间移动和转换。
(4)使用列存储结构,减少了对不相关数据的访问。
(5)优化DolphinDB内置的开发语言,最小化数据在执行过程中的复制。
(6)改进核心的数据结构算法,比如整数排序算法的速度是别的产品的5~10倍。
(7)采用自有的内存管理模块,根据大数据的内存分配特点优化内存管理算法。
(3)TimescaleDB
TimescaleDB 是目前市面上唯一的开源且完全支持 SQL 的时序数据库。它在 PostgreSQL 数据库的基础上进行开发,本质上是一个 PostgreSQL 的插件。
TimescaleDB 完全支持 SQL 且拥有 PostgreSQL 的丰富生态、并针对时间序列数据的快速插入和复杂查询进行了优化,支持自动分片,支持时间空间维度自动分区,支持多个 SERVER、多个 CHUNK 的并行查询,内部写优化(批量提交、内存索引、事务支持、数据倒灌)。
然而,目前 TimescaleDB 仍不支持水平扩展(集群),即不能动态增加新的数据结点以写入数据(Write clustering for multi-node Timescale deployments is under active development),只支持通过 PostgreSQL 的流复制(streaming replication)实现的只读集群(read-only clustering)。
(4)TSDB
时序时空数据库(Time Series Database)是用于存储和管理时间序列数据及地理空间数据的专业化数据库,为时间序列数据及地理空间数据提供高性能读写和强计算能力的分布式云端数据库服务。
功能特性:
(1)数据读写:支持通过REST API方式、高并发写入时间序列数据。
(2)插值查询:提供插值查询能力,将未上传的数据补齐,并支持多种插值算法。
(3)实时监控:提供对数据库的写入、读取状态进行实时监控。
(4)时间序列数据管理:支持时间序列数据的写入、查询和删除,并可以设置数据时效。
(5)聚合计算:提供avg、sum等15种聚合函数,可以将数据降精度聚合,并支持嵌套聚合。
(6)Web图表可视化:通过Web图表的方式来展示数据波动曲线。
产品优势:
高性能读写:亿级数据点聚合结果秒级返回,分布式可扩展的写入能力。
低成本存储:使用高效的压缩算法,大大节省了数据所需的存储空间。您还可以自定义数据有效期,数据过期后会被自动清理,有效降低存储成本。
多生态支持:支持SQL生态以及Hadoop/Spark等大数据分析平台,还能使用Sugar等多种可视化BI工具来展示、分析数据结果。
高可靠服务:分布式部署可高效应对单点故障,保证数据高可靠性;三副本存储保证数据高可用性,一个副本发生故障时可自动切换至另一副本。
(5)HiTSDB
阿里云时间序列数据库 ( Time Series Database , 简称 TSDB) 是一种集时序数据高效读写,压缩存储,实时计算能力为一体的数据库服务,可广泛应用于物联网和互联网领域,实现对设备及业务服务的实时监控,实时预测告警。
功能特性:
(1)时序数据高效读写:百万数据点秒级读取,千万数据点秒级写入。
(2)时序数据管理:提供数据时效功能,自动删除过期数据,自定义删除指标数据。
i数据时效,滑动时间窗口自动失效过期数据,释放存储空间。
ii多维时间线查询,支持按照Metirc,分组,时间区间以及特定精度时间线查询。
(3)低成本存储:高压缩低成本存储,单个数据点平均2个字节。
(4)时序数据计算:支持各类时序数据计算
i 插值,缺失的数据点,支持线性插值数据补全。
ii 降精度,支持预降精度和实时降精度计算,满足高效查询需求。
iii空间聚合,支持按照不同 Tag 进行空间聚合和分组计算。
iiii聚合函数丰富,提供 AVG,SUM,MAX, MIN 等聚合函数。
(5)时序数据查询可视化:查询结果可视化的图表展现。
(6)实例监控运维:实例的资源和能力监控,使用情况一目了然。
i数据点写入实时监控,实时反馈写入情况。
ii随时获取存储使用情况,提早扩容或释放存储空间
(6)OpenTSDB
OpenTSDB是一个基于Hbase的分布式的,可扩展的时间数据库,它是建立在Hbase上的一层数据读写服务。它支持秒级数据采集所有metrics,支持永久存储,可以做容量规划,并很容易地接入到现有的报警系统里。OpenTSDB可以从大规模的集群(包括集群中的网络设备、操作系统、应用程序)中获取相应的metrics并进行存储、索引以及服务,从而使得这些数据更容易让人理解,如web化,图形化等。开源OpenTSDB仅支持通过Restful 方式查询时序数据库,学习成本高,使用不方便。
三、各数据库优劣势分析
(一)各数据库功能分析
(1)InfluxDB功能分析:
InfluxDB在最新的 DB-Engines时间序列数据库的排名中位列第一,无需特殊的环境依赖,使用简单方便,且底层采用了TSMT 结构实现高性能读写。相比于其他类型时序数据库,InfluxDB优势有以下几点:内置HTTP接口,使用方便;数据可以进行标记,查询灵活;支持类sql查询;实时查询,数据在写入索引后就能够被立即查出;灵活的数据保留策略,可以定义到Database级别。适用于存储大规模的时序数据并进行实时分析,包括来自 DevOps 监控、应用指标和 IoT 传感器上的数据。缺点为:字段值无法更新,不支持join操作;无法创建额外索引,用法较为呆板;需用户自己实现容错功能,且用户反馈并发查询性能差。
(2)DolphinDB功能分析:
DolphinDB作为国产时序数据库,在最新的 DB-Engines时间序列数据库排名中在国产时序数据库中排名第一。从语言方面而言,DolphinDB的query语言相对接近标准的sql语言,类似于python,虽然没有Kdb+的q语言复杂,但也需一定的学习成本。在数据库本身方面,DolphinDB支持多个数据库支持,一个数据库一个handle,完全不互斥。在分区方面,DolphinDB定义分区schema之后,由系统自动维护,DolphinDB可以把不同结构数据,用不同的partition,存在不同的数据库中,非常灵活。可并行搜索分区。分布式方面支持“备份/恢复”和“支持事务”这两个特点。
(3)TimescaleDB功能分析:
TimescaleDB 是目前市面上唯一的开源且完全支持 SQL 的时序数据库,这是TimescaleDB 相较于其他时序数据库的最大优势。缺点也很明显,TimescaleDB 基于PostgreSQL,适合数据量不太大的情形, 并且不支持水平扩展。
(4)HiTSDB、TSDB功能分析:
HiTSDB、TSDB分别为阿里云和百度云平台下的子产品,二者期初都是为解决自身业务需求而设计,后续逐渐商业化的产品。二者功能大同小异,主要为支持高效数据读写、插值查询、实时页面监控、数据管理、聚合计算、低成本存储等。
(二)数据库间功能对比
(1)InfluxDB、Kdb+、Dolphindb功能对比
(三)时序数据库在股转的应用点
从时序数据库特点来看,股转的交易数据满足数据基本上都是写入,没有更新的需求,而且不管申报,成交还是行情数据都是带时间标签的,在数据写入方面还没有达到秒级千万写入量的级别。
读写方面:时序数据库普遍适用于写多查少的场景,股转的交易数据是需要频繁写入的,但是写入量在秒级往往不太大,不能充分发挥时序数据库支持秒级千万写入量的优势;在查询方面,当前端有对大表进行查询且需快速响应需求时可考虑,因为各个数据库产品都做了查询优化,下面以数据库DolphinDB和InfluDB为例,查看查询性能(数据量:7800w,单位ms):
内置函数查询性能:
数据存储方面:由于时序数据库一般对数据都做了压缩,压缩比普遍能达到20-30%,从数据存储上看,可以减少部分存储成本。
附:
DolphinDB与InfluxDB在交易数据处理的对比测试报告
https://zhuanlan.zhihu.com/p/42287416
TimescaleDB比拼InfluxDB
https://www.cnblogs.com/dhcn/p/10370032.html
DolphinDB和TimescaleDB 性能对比测试报告
https://zhuanlan.zhihu.com/p/56982951
DolphinDB作为量化金融研究平台的8大优势
https://zhuanlan.zhihu.com/p/44995618
Else: DilphinDB(智臾科技) https://www.zhihu.com/question/289997125
附:国产时序数据库简介
(1)浙江智臾科技有限公司 - DolphinDB(https://www.dolphindb.com/)
DolphinDB是浙江智臾科技有限公司研发的一款高性能分布式时序数据库,集成了功能强大的编程语言和高容量高速度的流数据分析系统,为海量结构化数据的快速存储、检索、分析及计算提供一站式解决方案,适用于量化金融及工业物联网等领域。(商务:[email protected])
(2)北京涛思数据科技有限公司 - TDengine
涛思数据(TAOS Data) 专注时序空间数据的采集、存储、查询、计算和分析。开发了拥有自主知识产权、自主可控的高性能、可伸缩、高可靠、零管理的分布式时序空间数据引擎TDengine,可广泛运用于物联网、车联网、金融等领域,让数据监测分析系统的成本直降80%。
(3)北京中电普华信息技术有限公司 - 思极有容数据库(国网信通院-主要应用电力行业)
思极有容时序数据库正是普华公司面对这一高速增长的物联网大数据市场和技术挑战推出的创新性的大数据处理产品,它不依赖任何第三方软件,也不是优化或包装了一个开源的数据库或流式计算产品,而是在吸取众多传统关系型数据库、NoSQL数据库、流式计算引擎、消息队列等软件的优点之后自主开发的产品,在时序空间大数据处理上,有着自己独到的优势
(4)北京青云科技股份有限公司- QingCloud ChronusDB(云平台子产品)
ChronusDB时序数据库提供超强的查询分析、高性能并发读写、低成本存储、丰富的时序数据处理等能力,满足物联网设备监控分析、工业制造监控分析、系统及业务实时监控等场景的需求,旨在帮助企业实现对物联网数据的全生命周期管理和智能化分析,推动物联网产业朝着更加智能化的方向发展。
(5)阿里巴巴 - HiTSDB(分布式流式聚合引擎)https://www.aliyun.com/product/hitsdb
高性能时间序列数据库 (High-Performance Time Series Database , 简称 HiTSDB) 是一种高性能,低成本,稳定可靠的在线时序数据库服务; 提供高效读写,高压缩比存储、时序数据插值及聚合计算,时间线多维分析。主要服务于监控系统和IoT领域。
(6)百度 - TSDB
百度智能云时序时空数据库(Time Series Database,简称 TSDB)是一种存储和管理时间序列数据的专业化数据库,为时间序列的存储提供高性能读写、低成本存储、强计算能力和多生态支持的多种能力。