关系型数据库 vs 时间序列数据库

导航至

当涉及到应用程序性能时,数据库通常是最大的瓶颈。多年来,涌现出许多新的数据库设计,不仅有助于基本的可扩展性和性能,而且还有助于提高开发人员的生产力,并使构建某些类型的应用程序更容易。

这并不是说这些新的数据库是神奇的——总是有权衡取舍,并且为了在其他领域获得收益,某些东西会被牺牲。重要的是了解您有哪些可用的选项,然后为您的特定用例选择最佳工具。在本文中,您将了解时间序列数据库以及它们与更传统的关系型数据库的比较。

为什么为您的应用程序选择专用数据库?

近年来,针对特定用例优化的专用数据库呈爆炸式增长

  • 图数据库 - 用于高效存储和分析高度连接的数据。

  • 搜索数据库 - 数据库设计用于存储非结构化或半结构化数据,并能够有效地搜索该数据。

  • 时间序列数据库 - 针对支持高写入吞吐量进行优化,这对于 时间序列工作负载 和基于时间范围的查询很常见。

  • 键值数据库 - 支持高写入和读取性能,同时具有高度可扩展性。最基本的 NoSQL 数据库类型,只是一个指向值的键,没有额外的元数据。

  • 内存数据库 - 数据库设计用于仅处理存储在 RAM 中的数据,这使得无需担心磁盘访问而导致性能妥协。

DB-Engines

虽然关系型数据库在市场份额方面仍然占主导地位,但我们可以从上面的图表中看到,NoSQL 数据库的采用率正在迅速提高,其中时间序列、键值和图数据库在过去 2 年中增长最快。

开发人员开始为其应用程序使用更多专用数据库有几个原因。首先是用户要求软件具有更好的性能和更高级的功能,并且每家公司都应达到世界上最大的科技公司设定的性能期望。

第二个原因是,随着微服务架构的兴起,团队更容易为其应用程序的功能选择可用的最佳工具。由于微服务是独立部署的,并且实现细节与其他服务隔离,因此选择更专业的数据库变得更容易,因为其他团队不需要熟悉他们正在交互的微服务的底层技术。

要记住的关键是,向您的架构添加另一个数据库会带来复杂性。您始终需要考虑使用专用数据库的好处是否值得付出成本。在做出将对您的应用程序产生长期重大影响的决定之前,请务必权衡所有利弊。

关系型数据库概述

关系型数据库以表格格式存储数据,表格格式由行和列组成。数据组织在表中,并作为行存储在磁盘上,可以使用 SQL 查询数据。关系型数据库用途广泛,是迄今为止在许多不同类型的应用程序中最常用的数据库。

时间序列数据库概述

时间序列数据库从一开始就设计用于处理时间序列数据。结果是做出了一些设计权衡,以提高时间序列工作负载的性能,这涉及到处理大量写入吞吐量和基于时间戳的数据范围的独特查询模式的能力。另一方面,当涉及到更新数据或删除特定数据点时,性能会受到牺牲,因为对于大多数时间序列用例来说,更新和删除数据点很少完成,或者完全是一种反模式。

除了针对性能进行优化外,时间序列数据库还包括额外的功能,可以节省开发人员的时间,并使处理时间序列数据比使用非专用数据库更容易。其中一些示例包括用于管理数据生命周期、保留策略、批量数据删除、具有用于 分析预测 时间序列数据以及 警报 或其他自动化功能以对时间序列数据执行操作的内置方法的查询语言。

时间序列数据库 vs 关系型数据库

在本节中,我们将查看每个数据库的一些技术方面,以了解它们为什么具有已知的性能特征,以及每种数据库的一些优点和缺点。

关系型数据库 vs 时间序列数据库索引

在最基本的层面上,数据库的工作是允许用户存储数据,然后在以后访问它。其他一切都归结为数据写入速度与数据查询速度之间的权衡。索引使数据检索更快,但必须在数据写入或更新时进行维护和更新。维护索引的开销将导致数据写入速度减慢。

从架构的角度来看,对于它们的主索引,关系型数据库通常使用 B 树 变体。另一方面,NoSQL 数据库倾向于使用 LSM 树。B 树很好地映射到底层硬件存储,并在读取和写入方面提供均衡的性能。LSM 树允许非常高的写入性能,而读取性能往往比基于 B 树的索引更差。

由于写入性能对于时间序列工作负载至关重要,因此几乎所有时间序列数据库的存储引擎都使用 LSM 树。然后,专门的辅助索引针对跨时间范围和其他常见时间序列数据访问模式查询数据进行了优化。为了维护这些索引,删除或更新特定数据点的能力会受到性能影响,但这对于时间序列数据库来说是可以接受的权衡,因为用户应该很少这样做,并且提前知道性能后果并可以围绕它们进行计划。

压缩

关系型数据库将其数据以行的形式存储在磁盘上,不同的数据类型彼此相邻。这限制了可以使用的压缩算法类型以及可以压缩多少数据。相比之下,时间序列数据库通常以数据点类型相同的方式存储数据,这允许使用最佳压缩算法。结果是大大节省了存储成本,在某些情况下,数据可以压缩 90% 或更多。

模式

关系型数据库具有定义的模式;对表模式的任何更改(如添加或删除列)都需要数据库迁移。另一方面,时间序列数据库往往是无模式的,并允许快速轻松地添加新字段。

时间序列数据库用例

关系型数据库用途广泛,几乎可以用于任何类型的应用程序,并具有合理的性能。根据设计,时间序列数据库针对专门处理时间序列数据进行了优化,并且在其他情况下使用时性能不佳。让我们看看时间序列数据库在可扩展性、性能和效率至关重要的一些常见领域中的应用。

应用程序监控

时间序列数据库最早采用的领域之一是用于 监控应用程序。能够存储大量指标并在实时分析这些数据,使开发人员能够构建更可靠的软件,并为用户提供更好的体验。

物联网应用

全球部署的 物联网 设备数量每年都在增加,它们都在收集或生成数据。这些数据大多数是时间序列数据,无论是您家中的智能恒温器还是工厂中监控价值百万美元的机器的传感器。能够收集大量数据并有效地查询它,使消费者和企业能够在许多不同的方面提高效率。

安全

网络安全 变得越来越重要,似乎几乎不断发生重大黑客攻击事件。企业缓解安全威胁的一种方法是不断 监控其网络上的活动,而时间序列数据库是一个关键工具。它们允许以经济高效的方式存储更精细粒度的数据,并允许实时监控这些数据。可以将当前数据与历史数据进行比较,并且可以快速检测到异常情况,以预防或减少安全漏洞的影响。

结论

现代软件开发在许多不同的层面上都在快速变化,从开发周期本身,到软件架构,再到用于构建各个软件部分的工具。数据库是其中的一个方面,了解一些可用的新型数据库以及它们可能对您的工作产生的影响,对于在做出长期设计决策时做出明智的决策至关重要。