时序数据库(time-series database)全称为时间序列数据库,属于非关系型数据库,主键是时间序列。时间序列数据库主要用于指处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间序列数据。
时间序列数据主要由电力行业、化工行业等各类型实时监测、检查与分析设备所采集、产生的数据,这些工业数据的典型特点是:产生频率快(每一个监测点一秒钟内可产生多条数据)、严重依赖于采集时间(每一条数据均要求对应唯一的时间)、测点多信息量大(常规的实时监测系统均有成千上万的监测点,监测点每秒钟都产生数据,每天产生几十GB的数据量)。
特点基于时间序列数据的特点,关系型数据库无法满足对时间序列数据的有效存储与处理,因此迫切需要一种专门针对时间序列数据来做优化的数据库系统,即时间序列数据库。
对于时序大数据的存储和处理往往采用关系型数据库的方式进行处理,但由于关系型数据库天生的劣势导致其无法进行高效的存储和数据的查询。时序大数据解决方案通过使用特殊的存储方式,使得时序大数据可以高效存储和快速处理海量时序大数据,是解决海量数据处理的一项重要技术。该技术采用特殊数据存储方式,极大提高了时间相关数据的处理能力,相对于关系型数据库它的存储空间减半,查询速度极大的提高。时间序列函数优越的查询性能远超过关系型数据库,Informix TimeSeries非常适合在物联网分析应用。
·有效处理庞大数据
·对重复的部分,Informix TimeSeries只保持一份数据
·节省空间50%,有效降低I/O
·主键索引更有效
·时间序列表头分离的特性不浪费空间;
可用作时序的数据库:[时序]TimescaleDB, 基于 PostgreSQL, 支持 SQL. [时序]KairosDB, 基于 Cassandra, 不支持 SQL. [通用]CrateDB, 基于 Elastic Search, 但支持ANSI SQL [时序]InfluxDB, 是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖。 是 db-engines 上排名第一的时序数据库, 最新版中集群功能不开源了, 商业版支持, 另外并发查询性能较差. [通用]Kudu, 列式存储(类parquet), 支持 java API 更新数据, 比较赞的是支持 upsert. 可以通过 impala 或 spark 来支持SQL 查询.
简单点评(基于底层技术做的点评, 未做个实际测试)TimescaleDB 基于PostgreSQL, 可能适合数据量不太大的情形, 但提供丰富的SQL功能 KairosDB, 基于 Cassandra, 运维应该比较简单, 扩展性也应该不错, 写入性能估计要比 CrateDB 差一些, 另外不支持SQL. CrateDB 基于 Elastic Search, 写入性能应该很好, 扩展性也应该不错, 估计 SQL 支持度和读取性能会差一些, 支持全文检索.
db-engines 网站的对比: https://db-engines.com/en/system/CrateDB%3BKairosDB%3BTimescaleDB
Crate 官方的比较: http://go.cratedb.com/rs/832-QEZ-801/images/CrateDB-Cassandra-MongoDB-Comparison.pdf
================================ 支持SQL的流处理框架 ================================ 多数流处理方案中, 数据一般都会暂存在 kafka中, 格式推荐使用 Json/Avro, schema 推荐使用 Oracle Goldgate(OGG)数据格式.
支持SQL的流处理框架有: 1. Spark Streaming: 可以写很复杂的SQL, 比如和其他数据库DB做 join. 2. Kafka 的 KSQL: 和Kafka公用集群, 不需要额外计算集群. 3. PipelineDB : 基于 PostgreSQL 的扩展, cluster版需要付费. 流数据既可以直接写到 pipelinedb(以pipelinedb的FOREIGN TABLE形式暂存流数据), 然后通过 pipelinedb SQL来处理; 流数据也可以先打到kafka中, 然后再通过 pipelinedb extension来处理.
PinusDB
以简单、易用、高性能为目标,解决中小规模物联网场景设备数据存储,查询。
Influxdb
- 时序性(Time Series):与时间相关的函数的灵活使用(例如最大、最小、求和等);
- 度量(Metrics):对实时大量数据进行计算;
- 事件(Event):支持任意的事件数据,换句话说,任意事件的数据都可以做操作;
- 无特殊依赖;
- 自带数据过期功能;
- 自带权限管理,精细到“表”级别;
- 原生的HTTP支持,内置HTTP API;
- 强大的类SQL语法,支持min, max, sum, count, mean, median 等一系列函数,方便统计;
- 自带管理界面,免插件配置。
TimescaleDB基于PostgreSQL数据库
- 基于时序优化;
- 自动分片(按时间、空间自动分片(chunk));
- 全SQL接口;
- 支持垂直于横向扩展;
- 支持时间维度、空间维度自动分区。空间维度指属性字段(例如传感器ID,用户ID等);
- 支持多个SERVER,多个CHUNK的并行查询。分区在TimescaleDB中被称为chunk;
- 自动调整CHUNK的大小;
- 内部写优化(批量提交、内存索引、事务支持、数据倒灌);
- 复杂查询优化(根据查询条件自动选择chunk,最近值获取优化(最小化的扫描,类似递归收敛),limit子句pushdown到不同的server,chunks,并行的聚合操作);
- 利用已有的PostgreSQL特性(支持GIS,JOIN等),方便的管理(流复制、PITR);
- 支持自动的按时间保留策略(自动删除过旧数据)。