写点什么

时序数据到底是什么,为什么我们需要时序数据库?

发布于: 刚刚
时序数据到底是什么,为什么我们需要时序数据库?

作者:刘东华


什么是时序数据?如何存储?如何分析并挖掘其中的价值?


先看个问题:自动驾驶的特斯拉、自动华尔街交易算法、智能家居、当日送达的快递、跟踪每日新冠统计数据和社区空气质量,这些有什么共同之处?


首先,说明我们的世界正在以极快的速度发生变化,也体现了我们收集与分析越来越多数据的能力。


然而,如果你仔细观察,你会发现这些应用程序都需要一种特殊类型的数据:


· 自动驾驶汽车需要不断收集周围环境变化的数据,并根据天气状况、坑洼和无数其他变量进行调整。

· 自动交易算法需要不断收集市场变化的相关数据,以优化短期和长期投资回报。

· 智能家居需要通过监控室内情况来调节温度,识别危险等,并处理人机交互。

· 零售业精准和高效监控每一件商品的运输。


相比股市趋势、自动驾驶汽车,以及预测你下一次网上购物的准确时间,近些年有很多关于时序数据收集和分析如何影响个体日常生活的例子。


有史以来第一次,全世界对时间序列数据的兴趣以最意想不到的方式达到了顶峰。新冠肺炎全球大流行使全球数十亿人成为时间序列数据的消费者,并要求准确及时地了解新冠肺炎每日的趋势。


在我们这个渴求信息的世界里,获得详细的、特征丰富的时间序列数据已经成为最有价值的商品之一。企业、政府、学校和社区,无论大小,都在寻求从分析时间序列数据中挖掘价值的方法。


软件开发者的使用模式已经反映了同样的趋势。在过去两年中,时间序列数据库(tsdb)一直是增长最快的数据库:



在实际客户项目中,很多客户并不清楚什么是时序数据?应该如何选择数据库?甚至有很多方案采用关系型数据库或 hbase 来存储。


在这里,我们更深入地描述什么是时序数据、如何使用时序数据库,以及使用场景,并提供一些研究时序数据库的分析方法。

 

什么是时序数据


时序数据,即时间序列数据,按时间维度顺序记录且索引的数据。像智慧城市、物联网、车联网、工业互联网等领域各种类型的设备都会产生海量的时序数据。这些数据将占世界数据总量的 90%以上。便于我们根据时间变化对数据进行分析。



之前,我们对时序数据的看法都是静态的,每日气温的高低、股市的开盘价和收盘价,甚至每日或累计因新冠肺炎住院人数。但是,我们往往会忽略这些静态数据潜在的变化引起细微差异。让我们看些例子。


如果我给你 10 元钱,银行传统的数据库会在我的账户上有一笔支出,在你的账户上有一笔收。然后,如果你给我 10 元钱,同样的过程反过来进行。最后,我们的银行余额看起来还是一样的,对于银行而言,这个月没什么变化。但是,有了时序数据库后,银行会感知到,这两个人一直互转 10 元钱,可能有更深层次的原因。如果追踪这种细微差异,月末账户余额就有了更大的意义。


再比如在一个地点连续几天平均气温。在过去的几十年里,平均气温一直被用于建筑节能的主要参考因素。在任意一周里,同一地点每天的平均气温可能只是略有不同,但在同一时间内,影响环境的因素可能发生了巨大变化。相反,了解一天中每个小时的温度变化,加上这段时间的降水量、云量和风速,可以极大地提高物业建模和优化能源效率的能力。


同样,虽然了解某社区每天的新冠肺炎住院总人数很有价值,但仅凭这一个数字并不能很好地了解详细的情况。例如,一家医院可能会披露周一有 20 人住院,而整个星期的住院人数略有增加,到周五的住院总数为 23 人。乍一看,本周住院人数增加了 15%。但如果我们统计详细的记录(增加收集的频率),我们可能会看到,本周净增加 3 例,但实际上,有 10 人出院,13 新增,在过去的 5 天里,新入院人数增加了 65%。


随着时间的推移跟踪患者各方面数据(例如患者年龄、入院或出院、康复天数等),有助于我们了解如何得出每日统计数据,使我们能够更好地分析趋势,准确地报告总数,并采取措施,甚至会影响政府政策。


这些例子说明了现代时间序列数据与我们过去所知道的数据有多么不同。时间序列数据分析比饼图或 Excel 要深入得多。这些数据不只是将时间作为一个度量,关键是帮助我们进行数据分析,并获得有价值的信息。

此外,还有很多各种各样的时序数据,但不管什么场景或用户案例,所有时序数据集都有 3 个共同点:


1. 写入的数据几乎是新数据

2. 数据通常按时间顺序写入

3. 时间是一个主轴(时间间隔可以是规则的,也可以是不规则的)


换句话说,时序数据写入方式通常是“追加”。虽然可能需要在事后做数据纠正、处理延迟、无序等数据,但这些都是异常,而不是常态。


数据状态随时间变化


你可能会问,这与在数据集中加上一个时间列,有什么不同?这取决于你的的数据集是如何跟踪变化的?是更新当前条目,还是插入一个新条目?


当为某个传感器收集新数据时,是覆盖以前的读数,还是创建全新的数据?虽然这两种方法都将提供系统的当前状态,但如果每次都插入一个新的数据,则只能分析状态的变化。


简单地说,时序数据集将整个系统的变更跟踪为 INSERT 操作,而不是 UPDATE 操作。


对系统的每一个变更记录为一个新的、不同的行。正是这种做法使时序数据很强大,让我们能够测量和分析变化。过去发生了什么变化,现在发生了什么变化,以及我们可以预测未来的变化。


简而言之,以下是我对时序数据的定义:表示系统/进程/行为如何随时间变化的值集合。


这不仅仅是学术上的区别。我们的定义围绕在“改变”上,我们可以确定我们今天没有收集的时序数据和从现在开始收集数据的时机,这样我们以后就可以利用它的价值。很多时候,人们有时序数据,却没有意识到这些是时序数据


时序数据无处不在?


你能想出一些日常工作中常见的时序数据的例子吗?是否有人请求你帮忙做报告或分析,但又缺乏数据保真度?


假设你维护一个 web 网站。每次用户登录时,在“users”表中更新该用户的“last_login”时间戳。但是,如果将每次登录视为单独的事件,并随着时间的推移收集它们,会怎样呢?有了这类时序数据,可以分析历史登录活动,看看使用情况如何随着时间的推移而变化,根据用户访问应用的频率来划分用户等等。


另一个例子对世界各地的每个 IT 集团都至关重要,服务器、网络、应用程序、环境等的运营指标。这种时序度量数据对于保证的服务可靠性至关重要。通过跟踪每个指标中的变化,IT 部门可以快速识别问题,为即将发生的事件制定计划,并诊断应用程序更新是否导致了用户行为的变更,是变好,还是是坏。


这些例子说明了一个关键点,保留数据固有的时序特性可以让我们保留有价值的信息,比如数据如何随时间变化的。我们注意到,这两个示例都描述了一种常见时序数据类型——事件数据。


当然,以这种方法存储数据有个明显的问题:最终会得到海量的数据,而且增长速度非常快。所以这就是问题所在:能够分析增加的时序数据比以往任何时候都更有价值,但它堆积得非常快。

 

海量数据会引发一系列问题,无论是存储,还是快速查询,这就是为什么大家比以往任何时候都更倾向于使用时序数据库的原因。这个世界要求我们更快、更好地做出数据驱动的决策。传统静态数据无法解决这个问题。为了满足需求,您需要以尽可能高的保真度收集数据——这就是时序数据所提供的:系统中发生的一切能像电影一样存储起来,无论是软件、物理发电厂、游戏还是应用程序中的客户。


为什么需要时序数据库?


有人可能会问,为什么不使用通用数据库?


事实是你可以,而且有些人已经这么做了。但是,至少有两个原因使 TSDB 成为当今增长最快的数据库类别:规模和可用性


规模:时序数据积累得非常快,而普通数据库是为了处理这种规模(至少不是以自动化的方式)而设计的。关系数据库在非常大的数据集上表现很差,而 NoSQL 数据库在规模上更好(尽管针对时序数据进行微调的关系数据库实际上可以表现得更好,正如我们在基准测试中与 InfluxDB、Cassandra 和 MongoDB 相比所显示的那样)。相比之下,时序数据库(无论是关系数据库,还是基于 nosql 的数据库)引入的好处只有当你将时间视为第一考虑要素时才可能实现。这些好处使它们能够提供大规模的性能改进,包括更高的吞吐量和更快的大规模查询,以及更好的数据压缩。


可用性:TSDB 通常还包括时序数据分析常用的内置函数和操作,如数据保留策略、连续查询、灵活的时间聚合等。即使你刚刚开始收集这种类型的数据,现在还不需要考虑规模,这些功能仍然可以提供更好的用户体验,使数据分析任务更容易。使用内置的函数和特性来分析数据层中随时可用的趋势,通常会发现意想不到的价值,无论您的数据集是大是小。


这就是为什么开发人员越来越多地采用时序数据库,并应用于各种场景:


· 监控软件系统:虚拟机、容器、服务、应用程序等

· 监控物理系统:设备、机械、连接设备、环境、家庭、人体等

· 资产跟踪应用:车辆、卡车、物理集装箱、托盘等

· 金融交易系统:典型的的证券、新生的加密货币等

· 事件应用程序:跟踪用户/客户交互数据等

· 商业智能工具:跟踪关键指标和业务的总体运行状况等

· 等等


一旦把时序数据用于存储的更多信息时,我们仍然必须选择最适合业务的数据模型、读写模式、开发技术线的时序数据库。尽管 NoSQL 时间序列数据库在过去的十年中作为首选的存储介质已经盛行,但是越来越多的开发人员看到了将时序数据与业务数据分开存储的劣势(大多数时序数据库没有为关系数据提供良好的支持)。事实上,这种糟糕的开发者体验正是我们开发 FastData For TSDB 的主要原因之一。将所有数据保存在一个系统中可以大大减少应用程序开发时间,以及便于快速做出关键决策。


随着 Tableau、Power BI,甚至是 Excel 等大量自助商业智能工具的兴起,当宝贵的时序数据与业务数据分离时,用户很难做出及时的、对业务至关重要的分析与观察。相反,用户发现他们需要依靠这些第三方工具从数据中分析有意义的信息。使用这些功能强大的工具有很多正当的理由,但是能够快速查询时序数据和有意义的元数据信息不应该是理由之一。SQL 经过了几十年的考验,提供了相当成熟的生成这些有价值的聚合和分析的有效方法。


关键是,知道时序数据在哪里,以及把它存储在哪里,将会对未来的发展产生巨大的影响。


所有数据都时序数据吗?

 

在近十年时间的“大数据”的时代,各种规模和类型的组织收集了关于我们的世界的大量信息,并通过计算分析来理解这些信息。


尽管这个时代始于适度的计算技术,但由于主要的宏观趋势:摩尔定律、克莱德定律、云计算、“大数据”技术行业,我们收集、存储和分析数据的能力已经以指数级的速度增长。



根据摩尔定律,计算能力(晶体管密度)每 18 个月翻一番,而克莱德定律则假定存储容量每 12 个月翻一番。

我们不再仅仅满足于观察世界的状态,而是需要测量世界是如何随着时间变化的,精确到次秒级。“大数据”现在相对于另一种类型的数据相形见绌,这种数据严重依赖时间来保存正在发生变化的信息。


所有数据都是源自时序数据吗?回想一下之前的 web 应用的例子,我们有时序数据,但没有意识到 —— 追踪用户活动能够有助于分析用户粘性。或者想想任何“正常”数据集,比如一家大型零售银行的往来账户和余额,或者软件项目的源代码,或者是这篇文章的文本。

 

通常我们只需要存储系统的最新状态,但是,如果我们存储每个变改,并在查询时计算最新状态,会怎么样呢?难道一个“正常的”数据不只是一个固有的时序数据(缓存的性能原因)之上的视图吗?银行没有交易账单吗?(区块链不就是分布式的、不可变的时序日志吗?)软件项目没有版本控制(例如 git 提交)吗?这篇文章没有复习历史(撤销、重做)吗?


换句话说:难道不是所有的数据库都有日志吗?


我们认识到,许多应用程序可能永远不需要时序数据(最好使用“当前状态视图”)。但随着我们继续沿着技术进步的指数曲线前进,这些“当前状态的观点”似乎变得不那么必要了。相反,我们发现越来越多以时序的形式存储的数据常常有助于我们更好地理解它。


所有数据都是时间序列数据吗?我还没有找到一个好的反例,大家可以找找。但无论如何,可以明确的是:时序数据一直围绕着我们,是时候利用起来了。


利用时序分析挖掘价值


至此,你已经开始识别你的业务中有时序数据的应用程序或领域,这些数据正等着你去做一些事情。所以,现在该做什么呢?是时候了解为什么时序数据库是必不可少的工具了。


让我们来看一个基于我们前面引用的 web 应用程序例子。如我们所讨论的,我们只记录了用户最后一次作为“users”表中的字段登录的情况,并且总是用新的登录信息更新以前存储的值。虽然这可以让我们查询一周或一个月有多少人登录,但我们无法分析他们登录的频率和时长,也无法深入分析其他可能告诉我们更多用户体验或使用情况的的信息。


我们可以通过追踪每个登录信息,而不仅限于最近一次,来快速改进这一点。为此,我们将开始记录每次登录的时间和用于访问我们的应用程序的设备类型(如手机、pad、PC)。这一小小的变化(追踪用户登录体验的另一个属性)提供了即时的价值,使我们能够回答诸如“哪种设备是最常用的(个人用户和所有用户)?”,以及“用户在一天中的什么时候最活跃?”等问题,由此可以更好地获知我们优先考虑的功能,比如特定于移动设备的功能、显示某些促销信息的时间等等。


为了追踪这个新数据,我们添加了一个名为“user_logins”的新表,它引用了“users”表。以下是数据的一个例子:


用户表:


用户登录表:


有了更新的数据模型和这些新用户详细信息,我们就可以开始查询数据。如前所述,像 FastData For TSDB 这样的时序数据库以两种关键方式来处理这类信息:


首先,随着应用程序的规模和数据量的增长,构建数据库的目的是处理和摄取固有的、不间断的时序数据流,降低任何负面的性能影响或延迟。


其次,还提供了专门的功能,以有意义的方式查询数据,并让各个方面变得更容易、更快,其中时间是主要组成部分。


为了演示一些专门的时序分析功能,让我们看看 FastData For TSDB 扩展到 SQL 语言中的几个示例函数,以及如何使用它们更好地分析用户的使用行为模式。


在每个示例中,我们仍然使用标准的 SQL 语言(开发人员基本都熟悉的一种语言),并将其扩展到时序用例中。WHERE 子句仍然有效,而且我们仍然可以用 GROUP BY 子句轻松地聚合数据。但是现在,我们可以使用 time_bucket()这样的函数轻松地跨几乎任何时间间隔聚合数据,而不必解析日期的特定部分以适当地对数据进行分组。


而且,另外还使查询可读性更高!下面看几个例子。


查询 #1:上个月每天有多少次登录?


查询 #2:每个用户的最后一次的登录时间和类型设备?


问题 #3:在过去的一周中,哪 6 个小时时间段的平板电脑用户登录次数最多?


这些例子只是冰山一角,在如何查询和建模数据方面拥有无限的灵活性。时序数据库像 FastData For TSDB 可以帮助我们分析和发现有意义的数据,支撑快速做出决策。

 

如果你对以上内容感兴趣且需要帮助的话,可以登录https://www.deepexi.com/product-new/27了解更多 TSDB 产品详情。


发布于: 刚刚阅读数: 2
用户头像

还未添加个人签名 2020.12.22 加入

滴普科技2048实验室致力于探索科技未知,以点滴努力,普惠科技为驱动力,立足于数据智能、创新性技术和应用技术的研究院。

评论

发布
暂无评论
时序数据到底是什么,为什么我们需要时序数据库?