关系型数据库与时间序列数据库的比较
作者:Charles Mahler / 产品,用例
2022年9月20日
导航至
数据库往往是应用性能的瓶颈。多年来,许多新的数据库设计出现,不仅帮助实现基本的可扩展性和性能,还帮助提高开发者的生产力,并使构建某些类型的应用程序变得更加容易。
这并不是说这些新数据库是神奇的——总会有一些权衡,某些东西是为了在其他领域获得收益而牺牲的。重要的是要知道你有哪些选择,然后选择最适合你特定用例的工具。在本文中,你将了解时间序列数据库以及它们与传统关系型数据库的比较。
为什么为你的应用程序选择专用数据库?
近年来,针对特定用例优化的专用数据库激增
-
图数据库 - 用于高效存储和分析高度连接的数据。
-
搜索引擎数据库 - 设计用于存储非结构化或半结构化数据,并能够高效搜索这些数据。
-
时间序列数据库 - 优化支持常见于时间序列工作负载和高吞吐量查询,以及基于时间范围的查询。
-
键值数据库 - 支持高写和读性能,同时高度可扩展。最基本的NoSQL数据库,仅是一个指向值的键,没有其他元数据。
-
内存数据库 - 设计用于处理仅存储在RAM中的数据,这意味着由于无需担心磁盘访问,因此无需在性能上做出妥协。
虽然关系型数据库在市场份额上仍然占主导地位,但我们可以从上面的图表中看出,NoSQL数据库正在迅速被采用,在过去两年中,时序数据库、键值数据库和图数据库增长最快。
开发者开始使用更多专用数据库的原因有几个。第一个原因是用户对软件的性能和功能提出了更高的要求,每个公司都期望能够满足世界上最大科技公司设定的性能预期。
第二个原因是随着微服务架构的兴起,团队选择适用于其应用程序功能的最佳工具变得更加容易。因为微服务是独立部署的,实现细节被从其他服务中抽象出来,因此选择更专业的数据库变得更加容易,因为其他团队不需要熟悉它们交互的微服务的底层技术。
需要记住的关键一点是,在架构中添加另一个数据库会带来复杂性。你始终需要考虑使用专用数据库的好处是否值得付出的代价。在做出对长期应用有重大影响的决策之前,务必权衡所有利弊。
关系型数据库概述
关系型数据库以表格形式存储数据,由行和列组成。数据以表格形式组织,并存储在磁盘上,行可以查询。关系型数据库功能强大,是目前使用最广泛的数据库,广泛应用于各种类型的应用程序。
时序数据库概述
时序数据库从底层设计就是为了处理时序数据。这导致在提高时序工作负载性能方面做出了一些设计权衡,这涉及到处理大量写入吞吐量和基于时间戳的数据范围的独特查询模式的能力。另一方面,当涉及到更新数据或删除特定数据点时,性能会牺牲,因为对于大多数时序用例,更新和删除数据点很少进行,或者是一种反模式。
除了优化性能外,时序数据库还包括一些其他功能,这些功能可以节省开发者的时间,使使用时序数据比使用非专用数据库更容易。这包括管理数据生命周期、保留策略、批量数据删除、内置分析或预测时序数据的方法、警报或其他自动化功能来对时序数据进行操作等。
时序数据库与关系型数据库的比较
在本节中,我们将查看每个数据库的一些技术方面,以了解它们为什么具有已知的性能特征,以及每个数据库的优缺点。
关系型数据库与时序数据库的索引
在最基本的层面上,数据库的工作是允许用户存储数据,然后稍后访问它。所有其他事情都归结为写入速度与查询速度之间的权衡。索引可以加快数据检索速度,但必须随着数据的写入或更新而维护和更新。维护索引的开销会导致写入速度减慢。
从架构角度来看,关系型数据库通常使用B树变体作为它们的索引。另一方面,NoSQL数据库倾向于使用LSM树。B树很好地映射到底层硬件存储,为读写提供了平衡的性能。LSM树允许非常高的写入性能,而读取性能通常比基于B树的索引差。
由于写入性能对于时间序列工作负载至关重要,几乎所有的时序数据库存储引擎都使用LSM树。专门的二级索引针对跨时间范围和其他常见时间序列数据访问模式进行优化。为了维护这些索引,删除或更新特定数据点的能力会降低性能,但对于时间序列数据库来说,这是一个可接受的权衡,因为用户很少会这样做,并且可以提前了解性能后果并作出相应的计划。
压缩
关系型数据库在磁盘上按行存储数据,不同数据类型相邻。这限制了可以使用的压缩算法类型以及可以压缩的数据量。相比之下,时序数据库通常以这种方式存储数据,即相同类型的数据点相邻,这允许使用最优的压缩算法。结果是存储成本的大幅节约,在某些情况下,数据可以压缩90%或更多。
模式
关系型数据库具有定义的模式;对表模式的任何更改(如添加或删除列)都需要数据库迁移。另一方面,时序数据库通常是模式无关的,可以快速轻松地添加新字段。
时序数据库应用场景
关系型数据库功能强大,可以用于几乎任何类型的应用程序,并具有合理的性能。按设计,时序数据库针对专门处理时间序列数据进行了优化,在其他情况下使用时性能不佳。让我们看看在可扩展性、性能和效率至关重要的几个常见领域,时序数据库是如何被使用的。
应用监控
时序数据库最初被采用的一个领域是用于监控应用程序。能够存储大量指标并实时分析这些数据,使开发者能够构建更可靠的软件,并为用户提供更好的体验。
IoT应用
全球部署的物联网设备数量每年都在增加,它们都在收集或生成数据。其中大部分是时间序列数据,无论是家中的智能恒温器还是工厂中监测价值百万美元机械的传感器。能够收集大量数据并高效查询这些数据,使消费者和企业能够在许多不同的方面提高效率。
安全
网络安全每年都变得更加重要,似乎重大的黑客攻击几乎一直在发生。企业减轻安全威胁的一种方式是不断监控网络和时序数据库的活动,时序数据库是一个关键工具。它们允许以成本效益的方式存储更细粒度的数据,并允许实时监控这些数据。可以将当前数据与历史数据进行比较,并快速检测异常,以防止或减少安全漏洞的影响。
结论
现代软件开发在许多不同层面上变化迅速,从开发周期本身到软件架构,以及构建单个软件组件使用的工具。数据库是其中一方面,了解一些新类型的数据库以及它们可能对您的工作产生的影响,对于在做出长期设计决策时做出明智的决定至关重要。