列数据库是什么东东?何时应该使用它?

译文
数据库
如果您在处理主要用于分析的大量数据,那么列数据库可能是个不错的选择。

​译者 | 布加迪

审校 | 孙淑娟

说到为具体应用选择数据库,有很多不同的选项。经常讨论的话题似乎是选择SQL数据库还是选择NoSQL数据库,即数据应该存储在关系数据库中,还是存储在键值、文档或图形数据库之类的NoSQL数据库中。

另一种选择是索性使用列数据库。本文介绍为什么有必要做出这种选择,以及列数据库的一些优缺点。

列数据库的定义

顾名思义,列(或列式)数据库将按列组织而不是按行组织的数据存储在磁盘上。以物联网传感器为例,基于行的数据库会如图所示将数据存储在磁盘上:

而列数据库将组织相同的数据,以便每个列值按顺序存储在磁盘上:

列数据库的主要优点是,由于压缩比提高,它可以大大缩减存储数据所需的磁盘空间。此外,列数据库在处理分析型查询时比基于行的传统数据库要快得多。

为什么列数据库适合分析型工作负载?

那么,改变数据的存储格式究竟如何提升性能的呢?与传统数据库相比,有几个因素导致列数据库能够为联机分析处理(LAP)工作负载提供高得多的性能。

第一个原因是压缩比提高。这是由于列数据库能够为每种类型的数据使用最佳压缩算法,因为每列都是相同类型的数据,而不是一行混合类型的数据。这不仅降低了磁盘上的存储成本,还提高了性能,因为需要的磁盘寻道更少,内存可以容纳更多的数据。

列数据库提升性能的另一种方法是实际上在底层存储同一列的多个不同版本,这些版本按不同的顺序进行排序,以便为某些查询加快过滤和选择的速度。

列数据库还可以通过许多其他方法来提升性能。下面是几个例子:

  • 查询数据时进行自适应索引
  • 矢量化处理
  • 列的连接经过优化,变得更有效
  • 列的后期物化

这篇​​论文​​分析了列数据库的性能,作为论文一部分进行的测试的示意图显示了上述优化的结果。基于TPC-H数据仓库基准数据集,列数据库的运行速度比传统的行结构数据库快10倍左右。

该图显示了哪些优化对列数据库的性能影响最大,在此处,后期物化带来的性能提升最大。

列数据库性能方面的取舍

与计算机科学界的几乎所有事情一样,列数据库性能方面也进行了一番取舍。它们针对分析型工作负载进行了优化,本身不适合传统的联机事务处理(OLTP)工作负载,而关系数据库为这种工作负载而设计。

最大的性能牺牲将出现在试图更新特定数据点或写入单个数据点的情况下。就列数据库而言,您希望尽可能批量插入数据。

列数据库还会对读查询有影响,您获取一行中的所有数据,就像使用关系数据库一样。由于必须重新构造每一列才能创建整行,因此性能会受到影响。

列数据库的用例

列数据库非常适合您想要分析大量数据的任何情况。不妨看一下几个常见的用例。

商业智能

列数据库非常适合分析销售数据,因为它们让您可以以各种方式划分信息。这可以帮助您确定可能无法看到的趋势和模式。比如说,可以使用列数据库按位置、品牌或产品类别来比较一段时间不同产品的销售数据。

应用程序性能监控

应用程序性能监控是使用列数据库帮助提高软件可靠性和性能的另一种常见情况。通过跟踪和分析有关应用程序运行状况的数据,您可以在问题导致应用程序崩溃或变慢之前发现问题。这有助于避免停运时间,并确保用户获得最佳体验。如果使用列数据库,您可以存储粒度更细的数据以获得更深入的洞察力,同时因出色的数据压缩而降低成本。

物联网

组织在部署越来越多的联网设备,其中许多设备收集用于分析工作负载的数据。列数据库可用于存储这些数据,以实现实时警报,还可用于生成预测,在许多不同行业提高效率。

专门化列数据库的示例

到目前为止,我们已经大体了解了列数据库及其优点。虽然所有列数据库有相同的特征,可以有效地用作通用数据仓库或数据湖,不过下面介绍如何针对更具体的性能特征对它们进行调优和优化。

InfluxDB IOx

InfluxDB IOx是一款面向InfluxDB的开源列存储引擎,为处理时间序列数据进行了优化。时间序列数据在性能方面带来了独特的挑战:

  • 分析类型的查询,只需要几列数据,比如从传感器获得过去一周的平均温度。
  • 关系类型的查询,用户需要过去5分钟内来自许多不同传感器的所有可用信息。

时间序列数据还往往大批量到达,这需要快速获取能力,以便能够快速索引和查询数据,用于实时监控和警报。此外,许多用户希望能够长期存储这些数据,用于历史分析和预测,又不必担心成本过高。

InfluxDB让用户可以集两者之所长,其办法是管理数据的生命周期,并在热存储和冷存储之间移动数据,历史数据方面获得快速性能,同时通过对未频繁查询的数据使用更便宜的对象存储来降低存储成本。

实现这一目标的关键手段就是构建和贡献Apache Arrow、DataFusion和Parquet之类的项目。Arrow允许数据在内存中以列格式压缩,并在数据库的不同部分之间移动。Parquet用于高效的持久性存储,DataFusion提供高性能查询和SQL支持。其他许多主要项目和厂商也在夯实Parquet和Arrow项目,这些项目还能够与更广泛的大数据生态系统实现集成和兼容。

ApacheDruid

Apache Druid是一款拥有底层列数据结构的实时数据库。Druid适用于典型的数据仓库类型工作负载,比如您期望从列数据库获得的工作负载,但它也优先考虑低延迟响应时间,常常用于交互式用户界面之类的对象。

DuckDB

DuckDB是为OLAP工作负载设计的进程内数据库,实际上旨在成为面向分析的SQLite。DuckDB使用列式矢量化处理,以出色的性能运行SQL查询,可以轻松嵌入到应用程序中。DuckDB的主要卖点是,在大多数OLAP数据库要么云托管要么需要复杂安装过程的环境下,它很容易在本地设置和运行。

选择适合具体任务的工具

说到底,技术决策归结为什么技术对您的用例有意义。说到长期构建应用程序,选择数据库可能是最重要的选择之一,因此有必要了解所有可用的选项,选择最适合的那一种。

如果您在处理主要用于分析的大量数据,那么列数据库可能是个不错的选择。

原文标题:What Is a Column Database and When Should You Use One?,作者:Charles Mahler​

责任编辑:华轩 来源: 51CTO
相关推荐

2021-02-18 09:23:47

数据库分区数据库仓库

2020-06-09 09:19:14

数据库

2023-11-10 12:55:00

消息代理事件代理

2021-11-12 05:45:12

云数据库云计算

2021-12-27 07:59:11

Web3区块链协议

2022-07-06 09:29:40

JMH性能测试

2022-04-26 16:56:20

行为数据数据

2019-08-12 16:30:24

Windows 10Windows安全模式

2020-11-20 15:04:27

数据库云数据库安全

2018-08-08 17:29:23

数据库索引磁盘存取

2022-06-15 07:32:24

数据库分库分表

2018-03-02 09:00:00

数据库NoSQLSQL

2018-07-30 08:20:39

编程语言Python集合

2020-04-14 12:53:01

Nuxt.jsVue.js前端

2019-01-16 14:00:54

数据库分库分表

2018-08-26 15:39:03

数据库MySQL索引

2023-12-13 10:11:14

数据库ACID数据

2014-03-17 10:14:53

云桌面DaaS

2020-12-31 05:29:25

数据库Powerdesign建模

2010-06-02 19:27:10

数据库数据安全
点赞
收藏

51CTO技术栈公众号