由于工作上的关系,最近看了一些关于时序列数据库的东西,当然,我所看的也都是以开源方案为主。

趁着这股热劲还没退,希望能整理一些资料出来。如果正好你也有这方面的需求,那么希望这一系列的介绍能够帮助到你。

1. 什么是时序列数据库(Time series database)?

一听到时序列数据库,如果只是稍有耳闻的人,可能立刻会联想到运维和监控系统。

没错,确实是很多运维、监控系统都采用了TSDB作为数据库系统来存储海量的、严格按时间递增的、在一定程度来说结构非常简单的各种指标(英文可能为metric、measurement或者类似的其他单词)数据。

1.1. 给TSDB一个定义

这是维基百科上的解释:

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).

翻译过来就是“时序列数据库用来存储时序列(time-series)数据并以时间(点或区间)建立索引的软件。”

其中,时序列数据可以定义如下:

  • 可以唯一标识的序列名/ID(比如cpu.load.1)及meta-data;
  • 一组数据点{timestamp, value}。timestamp是一个Unix时间戳,一般精度会比较高,比如influxdb里面是nano秒。一般来说这个精度都会在秒以上。

一般时序列数据都具备如下两个特点:

  • 数据结构简单
  • 数据量大

所谓的结构简单,可以理解为某一度量指标在某一时间点只会有一个值,没有复杂的结构(嵌套、层次等)和关系(关联、主外键等)。

数据量大则是另一个重要特点,这是由于时序列数据由所监控的大量数据源来产生、收集和发送,比如主机、IoT设备、终端或App等。

2. TSDB数据库特点

TSDB作为一种专为时序列数据优化而设计的数据库,在很多方面都和传统的RDBMS和NoSQL数据库不太一样,比如它不关心范式和事务。

其他方面TSDB的特点主要有以下几点,这里简单罗列了一下。

2.1. 数据写入

TSDB在数据写入方面,具有如下特点:

  • 写多于读

95%-99%的操作都是写操作

  • 顺序写

由于是时间序列数据,因此数据多为追加式写入,而且几乎都是实时写入,很少会写入几天前的数据。

  • 很少更新

数据写入之后,不会更新

  • 区块(bulk)删除

基本没有随机删除,多数是从一个时间点开始到某一时间点结束的整段数据删除。比如删除上个月,或者7天前的数据。很少出现删除单独某个指标的数据,或者跳跃时间段的数据。

区块删除很容易进行优化,比如可以按区块来分开存储到不同的文件,这样删除一个区块只需要删除一个文件就可以了,成本会比较低。

2.2. 数据读取(查询)

相对于写入操作,TSDB的读取操作特点如下:

  • 顺序读

基本都是按照时间顺序读取一段时间内的数据。

  • 基数大

基本数据大,超过内存大小,要选取的只是其一小部分,且没有规律,缓存几乎不起任何作用。

即使读取操作相对写来说较少,但是读操作的响应时间要求很高,除非你是只做后台报表生成,否则一旦有交互性操作,必须要求快速响应。

为了提高读取的响应时间,有两种策略。

一是以写性能优先,不为读取做存储优化,但是通过分布式和并发读,来提高读取的速度。

二就是在写入的时候就考虑到读的性能问题,将统一指标、时间段的数据写入到同一数据块中,为读取进行写入优化。

2.3. 分布式(集群)

TSDB应该天生就要考虑到分布式和分区等特性,将存储和查询分发到不同的服务器,以支撑大规模的数据采集和查询请求。

同时,它也应该是能扩展和自动失败切换(Fault-tolerant)的。随着数据量的增长,所需服务器的台数也会增加,能动态的增减服务器则是一个基本要求。同时,随着服务器的增多,各种服务器软件或者网络故障发生的概率也会增大,这时候失败切换也显得很重要,不能因为一台机器的失效而导致整个集群不可工作。

2.4. 基本数据分析支持

TSDB的数据是用来分析的,所以TSDB还会提供做数据分析所必须的各种运算、变换函数。比如可以方便的对时序列数据进行求和、求平均值等操作,就像传统的RDBMS一样。

3. 如何去选择开源时序列数据库

虽然每个人的场景不太一样,不过我觉得以下的大部分因素,都值得大家好好考量一下。除了功能上能满足、性能上撑得住,运(售)维(后)等也是我们准备长期使用所必须面临的问题。

我自己总结的评价因素主要有如下几点:

3.1. 性能

主要就是读和写的性能,在前面TSDB的特点中我们已经讲过了。

通过前面的说明,我们也知道TSDB 99.9%都是读少写多,因此写入性能必须能跟得上、无延时,并且不能阻塞读操作,且读操作能快速返回最新的数据。

还有一点必须注意的是,现在很多用户的数据都跑在云主机上,那么IOPS则是一个你必须要注意的因素,超了Plan限制的话很难找出问题原因。

3.2. 存储方案(或引擎)

存储方案主要会影响到读写性能、集群扩展容易程度、以及运维的复杂度。典型的存储方案有HDFS、HBase、Cassandra、LevelDB等。

3.3. 集群功能

一般来说,集群主要集中为存储和查询的集群功能,也代表其可扩展性,因为时序列数据库的数据量很可能很大,并且增长趋势不可预测,尤其是随着大数据和物联网的兴起,GB已经算入门,TB也是刚起步。

3.4. API(HTTP API和Client Library)

如果你需要定制,或者只是使用TSDB做存储,自己写入数据并通过查询接口进行数据展示,那么API的完善程度将是一个很重要的评判因素。

还好大部分TSDB都提供了HTTP API,除了简单的文本格式,有很多还支持JSON格式的输入、输出。

Client Library也是一个加分项,有一个好用的、你熟悉的语言的SDK包的话应该会更方便你做开发。

3.5. SQL-like Query Language

如果能通过类似传统SQL的select mean(value) from metric where role='user' and time >= xxx and time <= yyy group by dc来查询metric的话,是不是刚接触到TSDB的人更容易上手和理解呢?

可能这看起来比较酷,不过对我来说这只能算是个加分项而已。因为我们只会通过API来读写数据,而且查询模式非常固定、数量不多。

但是很多经常出报表的人,可能更喜欢这一特点了,因为老板、运营可能会定期或者随时找他们出统计数据。

3.6. 部署体验

即是否容易部署,特别是作为产品的话,很多企业级产品在安装部署或者升级所耗费的时间绝对是占了大头的。所以是否容易部署就成了一个重要的指标,比如是否能一键部署、单机部署?是否有额外依赖组件等。

同时,部署的容易程度也几乎等于以后运维的复杂程度。

3.7. 成熟度

成熟度包括软件本身的成熟度和生态系统的成熟度。

3.7.1. 生态系统

生态系统主要是指围绕该软件的周边工具、插件的丰富程度,以及相应的社区的活跃程度。

一个软件的生态系统,跟它的开放机制、插件(扩展)机制关系很大,直接决定第三方是否能很方便的对系统进行扩展。

3.7.2. 开发活跃度

这个可以从TSDB项目的提交记录(比如从GitHub上能看到开发状况)、ISSUE的解决情况,Pull Request的merge情况、以及Release的频率来确认。

有一些TSDB项目甚至提供了ROADMAP,我们还可以通过路线图来了解该软件未来发展方向、特性支持。

3.7.3. 社区包活跃度

主要是文档的丰富性等,可以在Google搜索一下,看看相关的Blog是否足够多,也可以在StackOverFlow上看一下相关讨论内容。

最重要的评论观点就是在专业社区(比如在Ops相关讨论组或社区)中该TSDB出现的频次、大家的关注程度等。

3.7.4. 应用案例

是否有大规模、大公司真正的生产环境的部署案例?规模有多大,性能如何,有无问题等,都是重要考察因素。有大公司的信任背书,你在选择上也就多了份安心,少了些纠结。

比如,Druid就在主页列出了很多使用了Druid的公司: http://druid.io/druid-powered.html

3.8. 可视化和报警功能

说到TSDB,容易联想到的两个功能就是可视化和报警。如果TSDB自带了功能强大的可视化组件和报警支持,则可能会省去很多开发的成本,更容易吸引用户。即使开发,也能方便开发过程中进行调试和验证。

ELK这么流行,跟其一揽子方案关系很大。除了强大的功能之外,部署简单、功能齐全是其吸引人的地方。

3.9. 所采用技术栈

主要是该方案采用了什么编程语言,有哪些第三方模块。比如有的用Java编写,有的用Golang;有的用HBase,有的用自己的存储方案;有的自带丰富的UI,有的则只提供了简单的调试界面。

技术栈为什么也是一个选型时需要考虑的因素呢,这是因为TSDB所采用的技术,会影响你们开发和运维的复杂程度,此外还会受到既有资产的影响。比如你们没有人熟悉HBase,又不熟悉Java语言,那么可能Influxdb就更适合你们了。

3.10. 保留策略(Retention Policies,或自动删除、压缩)

自动删除就是为数据设置TTL,过了指定的TTL则自动删除相关数据,以节省存储空间同时提高查询性能。

如果不删除数据,也可以对数据进行压缩,或者再采样(Resampling),比如对最近1天的数据我们可能需要精确到秒,而查询1年的数据时,我们只需要精确到天,这时候,海量的数据一年只需要365个点来存储,大大节省了存储空间。

3.11. 背后主导公司

有商业公司专职开发,可能是个双刃剑。

好处是其持续性可期,不用担心过两天项目没有人维护了,有了bug也有人会专门解决。

敝处就是你可能上了贼船下来需要成本较高。比如ElasticSearch,搭建起ELK比较简单,但是一涉及到具体的生产环境部署时需要考虑的权限等问题,要么自己去hack,要么就得买他们的产品,这是成本上需要考虑的。

3.12. License

这可能是影响最弱的一个因素了,但是如果你想拿来商业化的话,则又是一个非常重要甚至致命的因素。

3.13. 多租户支持

这部分需求可能会比较少,但是如果想基于TSDB为用户提供服务,比如SaaS类应用,能从物理上隔离当然是最理想的了,不过很遗憾目前好像还没有这方面的方案。要想支持多租户,只能从应用自身来设计,类似传统RDBMS那样,为每个实体加入user_id=xxx类似的属性。

3.14. 安全性

比如:权限管理、访问控制等。

关于安全性最基本的需求就是不要像ELK那样,暴露在公网上如果不设防火墙的话,谁都能使用,这就带来了很大的安全隐患。

所以说,安全上的最小实现就是支持基本的用户密码认证功能,而且是在两个层次支持,一是UI层,即管理界面或者控制面板等,另一方面就是API级别的用户认证。

4. 参考文献

  • Time-Series Database Requirements
  • Thoughts on Time-series Databases
  • DB-Engines Ranking of Time Series DBMS(January 2016)

5. 相关阅读

这是本系列文章的其他部分:

  • 时序列数据库武斗大会之什么是TSDB
  • 时序列数据库武斗大会之TSDB名录 Part 1
  • 时序列数据库武斗大会之TSDB名录 Part 2
  • 时序列数据库武斗大会之OpenTSDB篇
  • 时序列数据库武斗大会之KairosDB篇

原文:http://liubin.org/blog/2016/02/18/tsdb-intro/

转载于:https://www.cnblogs.com/sunss/p/6423336.html

[转]时序列数据库武斗大会之什么是TSDB相关推荐

  1. 时序列数据库武斗大会之 TSDB 名录 Part 1

    2019独角兽企业重金招聘Python工程师标准>>> [编者按] 刘斌,OneAPM后端研发工程师,拥有10多年编程经验,参与过大型金融.通信以及Android手机操作系的开发,熟 ...

  2. 时序列数据库武斗大会之 OpenTSDB 篇

    在前面的<时序列数据库武斗大会之 TSDB 名录 Part 1>和<时序列数据库武斗大会之TSDB名录 Part 2>中,我们介绍了一些常见的TSDB,并在<时间序列数据 ...

  3. ORACLE数据库在导入导出时序列不一致的问题

    ORACLE数据库在导入导出时序列不一致的问题 在使用ORACLE数据库时,当给一个表设置自增字段时,我们经常会使用到序列+触发器来完成.但当你需要对数据库进行导入导出时,序列很容易出问题. 当你将数 ...

  4. 京东城市时空数据引擎JUST亮相中国数据库技术大会

    受疫情影响,第十一届中国数据库技术大会(DTCC 2020)从原定的5月份,推迟到了8月份,再推迟到了12月份.尽管如此,依然没有减退国人对数据库技术的热情.2020年12月21日-12月23日,北京 ...

  5. 京东城市时空数据引擎JUST亮相中国数据库技术大会(附PPT链接)

    受疫情影响,第十一届中国数据库技术大会(DTCC2020)从原定的5月份,推迟到了8月份,再推迟到了12月份.尽管如此,依然没有减退国人对数据库技术的热情.2020年12月21日-12月23日,北京国 ...

  6. mysql技术大会2020_2020年数据库技术大会助力技术提升

    下半年的技术大会比较多,作为数据库技术从业人员,自然比较关注数据库技术大会,有幸参加过几次数据技术嘉年华,每次参会能遇到很多数据库领域的知名专家,认真聆听技术大咖的主题分享总能获得很多数据库发展动态和 ...

  7. 数据库技大会五周年 技术领袖共聚DTCC

    2014年4月10日-12日,第五届中国数据库技术大会在北京五洲皇冠国际酒店隆重举行.本届大会的主题为"大数据技术探索与价值发现",参会规模达到1,800人.与往届不同,本届大会前 ...

  8. 北京大学生物信息学 (4)序列数据库

    北京大学生物信息学 (4)序列数据库 https://www.bilibili.com/video/BV13t411G7oh?p=9&spm_id_from=pageDriver 搜库算法 B ...

  9. 2015中国数据库技术大会十大看点抢先看

    未来世界什么最重要?有人说是数据,你赞同吗?大数据到底是一种新趋势还是老调重弹呢?有人总结了一句"扔掉数据的代价大于所需机器的代价时,大数据才有了存在的价 值."换而言之,当数据本 ...

最新文章

  1. RDKit | 基于scikit-learn将pytorch用于QSAR模型构建
  2. 【自译】八步成为数据科学家
  3. Java CAS无锁技术深度解析
  4. Maven 多环境配置profile
  5. C++ 嵌套类与局部类
  6. awvs12 Server Exception_使用WebSocket搭建服务器server
  7. linux.zip文件怎么解压,linux怎么解压zip文件
  8. 别踩白块儿游戏代码html,别踩白块儿HTML版的第二天
  9. 线性代数——矩阵的秩
  10. hibernate创建配置遇到问题:!-- https://mvnrepository.com/artifact/javassist/javassist -- dependency
  11. 我和欧阳娜娜一起搞研发
  12. 托福100分什么水平
  13. 计算机算法常用术语中英对照
  14. 数据人需要掌握的技能,从底层到应用
  15. 《机器学习实战》学习笔记(八):预测数值型数据 - 回归
  16. BAT和IBM信息无障碍现状概要
  17. 交换机高级特性简介:MUX VLAN、端口隔离功能、端口安全功能简单原理与配置
  18. 杭州还不错的IT公司,想跳槽了,不知道下一站在哪里
  19. 长虹32N1Linux是什么系统,2018最新最全长虹电视型号机芯软件对照表
  20. 基于Matlab的多普勒脉冲雷达回波仿真

热门文章

  1. WebRTC Pacing模块草稿
  2. 解决android 浏览器下载apk后提示 “无法打开文件”
  3. 如何等待ajax完成再执行相应操作
  4. 【SQL查询】正则表达式匹配字符串
  5. 力扣312题:戳气球
  6. 杭电。刘春英。老师 写给计算机软件专业的大学生 .
  7. java keydown事件_正确的方法来阻止keydown事件冒泡
  8. github直接网页上传时出现 this file is empty
  9. basemap基础投影与地图样式
  10. SpringBoot 整合 JWT 实现 Token 验证