About Time | 浅谈时序数据库那些事

简介: 时间在浩瀚的人类历史长河中总是一个耀眼的词汇,当科技的年轮划到数据时代,时间与数据库碰到一起,把数据库内建时间属性后,产生了时序数据库。

640 (1).gif

导读

正如《银翼杀手》中那句在影史流传经典的台词:“I've seen things you people wouldn't believe... All those ... moments will be lost in time, like tears...in rain.”

时间在浩瀚的人类历史长河中总是一个耀眼的词汇,当科技的年轮划到数据时代,时间与数据库碰到一起,把数据库内建时间属性后,产生了时序数据库。


时序数据库是一种带有时间戳业务属性的垂直型数据库。自从2014年开始,数据库热度排名网站DB-Engines就把时间序列数据库作为了独立的目录来分类统计,而且最近几年的增长率在全部数据库分类里排名第一(见下图)。

image.png

时序数据库

A time series database (TSDB) is a software system that is optimized for handling time series data, arrays of numbers indexed by time (a datetime or a datetime range)

以上是维基百科对于时序数据库的定义。可以把它拆解成3个方面来看:时序特性,数据特性,数据库特性。

  • 时序特性:

时间戳:通用的业务场景内以秒和毫秒精度为主,在一些遥感等高频采集领域,时间戳可以达到纳秒级别。

时间戳种类包括unix系统时间戳和Calendar, 并且支持时区的自动适配。

采样频率:采集频率一般有2种,一种是周期性的时间采样频率,比如服务器性能相关的定期汇总指标。另外一种是离散型的采样,比如网站的访问等等

  • 数据特性:

数据顺序追加

数据可多维关联

通常高频访问热数据

冷数据需要降维归档

数据主要覆盖数值,状态,事件

  • 数据库特性(CRUD)

写入速率稳定并且远远大于读取

按照时间窗口访问数据

极少更新,存在一定窗口期的覆盖写

批量删除

具备通用数据库要求的高可用,高可靠,可伸缩特性

通常不需要具备事务的能力

image.png

时序数据库发展简史

第一代时序数据存储系统
虽然通用关系数据库可以存储时序数据,但是由于缺乏针对时间的特殊优化,比如按时间间隔存储和检索数据等等,因此在处理这些数据时效率相对不高。

第一代时序数据典型来源于监控领域,直接基于平板文件的简单存储工具成为这类数据的首先存储方式。

以RRDTool,Wishper为代表,通常这类系统处理的数据模型比较单一,单机容量受限,并且内嵌于监控告警方案。

基于通用存储的时序数据库
伴随着大数据和Hadoop的发展,时序数据量开始迅速增长,系统业务对于处理时序数据的扩展性等方面提出更多的要求。

基于通用存储而专门构建的时间序列数据库开始出现,它可以按时间间隔高效地存储和处理这些数据。像OpenTSDB,KairosDB等等。

这类时序数据库在继承通用存储优势的基础上,利用时序的特性规避部分通用存储的劣势,并且在数据模型,聚合分析方面做了贴合时序的大量创新。

比如OpenTSDB继承了HBase的宽表属性结合时序设计了偏移量的存储模型,利用salt缓解热点问题等等。

然而它也有诸多不足之处,比如低效的全局UID机制,聚合数据的加载不可控,无法处理高基数标签查询等等。

垂直型时序数据库的出现
随着docker,kubernetes, 微服务等技术的发展,以及对于IoT的发展预期越来越强烈。

在数据随着时间而增长的过程中,时间序列数据成为增长最快的数据类型之一。

高性能,低成本的垂直型时序数据库开始诞生,以InfluxDB为代表的具有时序特征的数据存储引擎逐步引领市场。

它们通常具备更加高级的数据处理能力,高效的压缩算法和符合时序特征的存储引擎。

比如InfluxDB的基于时间的TSMT存储,Gorilla压缩,面向时序的窗口计算函数p99,rate,自动rollup等等。

同时由于索引分离的架构,在膨胀型时间线,乱序等场景下依然面临着很大的挑战。

时序数据库发展现状


目前,DB-Engines把时间序列数据库作为独立的目录来分类统计,下图就是2018年业内流行的时序数据库的关注度排名和最近5年的变化趋势。

image.png

公有云

AWS Timestream

2018.11 Amazon在AWS re Invent大会发布Timestream预览版。适用于 IoT 和运营应用程序等场景。
提供自适应查询处理引擎快速地分析数据,自动对数据进行汇总、保留、分层和压缩处理。

按照写入流量,存储空间,查询数据量的方式计费,以serverless的形式做到最低成本管理。

Azure Series Insights

2017.4 Microsoft发布时序见解预览版,提供的完全托管、端到端的存储和查询高度情景化loT时序数据解决方案。强大的可视化效果用于基于资产的数据见解和丰富的交互式临时数据分析。

针对数据类型分为暖数据分析和原始数据分析,按照存储空间和查询量分别计费。

开源

OpenTSDB

OpenTSDB是一个分布式的、可伸缩的时间序列数据库. 引入metric,tags等概念设计了一套针对时序场景的数据模型,底层采用HBase作为存储,利用时序场景的特性,采用特殊的rowkey方式,来提高时序的聚合和查询能力。

Prometheus

Prometheus会将所有采集到的样本数据以时间序列(time-series)的方式保存在内存数据库中,并且定时保存到硬盘上。需要远端存储来保证可靠和扩展性。

InfluxDB

InfluxDB是单机开源的时序数据库,由Go语言编写,无需特殊的环境依赖,简单方便。采用独有的TSMT结构实现高性能的读写。分布式需要商业化支持。

Timescale

面向SQL生态的时序数据库,固定Schema,底层基于PG,按时间管理chunk table。

学术

BTrDB

BtrDB面向高精度时序数据的存储应用,设计并提出了 "time-partitioning version-annotated copy-on-write tree" 的数据结构,为每一条时间线构建了一棵树,并且引入版本的概念处理数据的乱序场景

Confluo

Confluo设计了新型的数据结构”Atomic MultiLog“,采用现代CPU硬件支持的原子指令集,支持百万级数据点高并发写入,毫秒级在线查询,占用很少的的CPU资源实现即席查询

Chronixdb

ChronixDB基于Solr提供了时序存储,并且实现了特有的无损压缩算法,可以与Spark集成,提供丰富的时序分析能力。

商业&工业
PI

PI是OSI软件公司开发的大型实时数据库,广泛应用于电力,化工等行业,采用了旋转门压缩专利技术和独到的二次过滤技术,使进入到PI数据库的数据经过了最有效的压缩,极大地节省了硬盘空间

KDB

KDB是Kx System开发的时间序列数据库,通常用于处理交易行情相关数据。支持流、内存计算和实时分析Billion级别的记录以及快速访问TB级别的历史数据。

Gorilla

Gorilla是Facebook的一个基于内存的时序数据库,采用了一种新的时间序列压缩算法.可以将数据从16字节压缩到平均1.37字节,缩小12倍.并且设计了针对压缩算法的内存数据结构.在保持对单个时间序列进行时间段查找的同时也能快速和高效的进行全数据扫描。通过将时间序列数据写到不同地域的主机中,容忍单节点故障,网络切换,甚至是整个数据中心故障。

业界典型时序数据库解析


近2年来时序数据库正处于高速发展的阶段。国内外云市场各大主流厂商已经从整个时序生态的不同角度切入,形成各自特色的解决方案完成布局,开始抢占流量。

而以Facebook Gorilla为代表的优秀的时序数据库则是脱胎于满足自身业务发展的需要。学术上,在时序领域里面更是涌现了一大批黑科技,把时序数据的技术深度推向更高的台阶。

阿里巴巴的TSDB团队自2016年第一版时序数据库落地后,逐步服务于DBPaaS,Sunfire等等集团业务,在2017年中旬公测后,于2018年3月底正式商业化。

在此过程中,阿里云TSDB在技术方面不断吸纳时序领域各家之长,开启了自研的时序数据库发展之路。

相关文章
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
172 42
MySQL生产环境迁移至YashanDB数据库深度体验
这篇文章是作者将 MySQL 生产环境迁移至 YashanDB 数据库的深度体验。介绍了 YashanDB 迁移平台 YMP 的产品相关信息、安装步骤、迁移中遇到的各种兼容问题及解决方案,最后总结了迁移体验,包括工具部署和操作特点,也指出功能有优化空间及暂不支持的部分,期待其不断优化。
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
129 25
云数据库:从零到一,构建高可用MySQL集群
在互联网时代,数据成为企业核心资产,传统单机数据库难以满足高并发、高可用需求。云数据库通过弹性扩展、分布式架构等优势解决了这些问题,但也面临数据安全和性能优化挑战。本文介绍了如何从零开始构建高可用MySQL集群,涵盖选择云服务提供商、创建实例、配置高可用架构、数据备份恢复及性能优化等内容,并通过电商平台案例展示了具体应用。
数据库数据恢复——MySQL简介和数据恢复案例
MySQL数据库数据恢复环境&故障: 本地服务器,安装的windows server操作系统。 操作系统上部署MySQL单实例,引擎类型为innodb,表空间类型为独立表空间。该MySQL数据库没有备份,未开启binlog。 人为误操作,在用Delete命令删除数据时未添加where子句进行筛选导致全表数据被删除,删除后未对该表进行任何操作。
【深入了解MySQL】优化查询性能与数据库设计的深度总结
本文详细介绍了MySQL查询优化和数据库设计技巧,涵盖基础优化、高级技巧及性能监控。
505 0
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
90 3
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
177 3
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE 'log_%';`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
141 2

热门文章

最新文章