NoSQL数据库类型说明:列式数据库

时间:2022-03-01 23:16:22

为了满足对数据存储不断增长的需求,以及以最高效的方式容纳数据多样性,企业越来越倾向于选择非标准数据库类型。多年来,企业主要使用关系数据库。然而,随着需求的变化和存储价格的下降,人们开始转而使用非关系型数据库。

NoSQL数据库类型说明:列式数据库

列式数据库符合这种描述。这些是NoSQL数据库,专为高度分析、复杂查询任务而构建。与关系数据库不同,列式数据库按列而不是按行存储数据。这些列被收集以形成子组。

这类数据库的键名和列名不是固定的。同一列族或列簇中的列可以具有不同的行数,并且可以容纳不同类型的数据和名称。

当需要大型数据模型时,最常使用这些数据库。它们对于数据仓库非常有用,或者在需要高性能或处理密集查询时非常有用。

列式数据库如何工作

关系型数据库有固定的模式,它们具有行和列的表。宽列数据库具有相似但不同的架构。它们也有行和列。但是,它们不是固定在表中,而是具有动态模式。每列单独存储。

如果存在相似(相关)的列,则将它们关联到列族中,然后将这些列族与其他列族分开存储。 行键是每个列族的第一列,作为行的标识符。此外,之后的每一列都有一个列键(名称)。它标识行中的列,从而实现对列的查询。值和时间戳出现在列键之后,说明数据何时被输入或修改。

与每一行相关的列数或其名称可能会有所不同。换句话说,并不是一个列族的每一列都有相同的行数。事实上,即使它们可能共享它们的名字,每一列都包含在一行中并且不会跨越所有行。

接触过关系型数据库的人都知道,关系型数据库的每一列都有相同的行数,只是碰巧有些字段有空值,或者看起来是空的。对于宽列数据库,这些行不是空的,而是对于特定列根本不存在。

列族位于键空间中。每个键空间都包含一个完整的 NoSQL 数据存储,并且正如模式对关系数据库那样,它具有相似的角色或重要性。然而,由于 NoSQL 数据存储没有集合结构,键空间代表无模式数据库,其中包含数据存储设计和它自己的属性集。

当前最流行的列式数据库之一是 MariaDB。它是作为 MySQL 的分支而创建,它很强大且可扩展,可处理很多不同的目的和大量的查询。Apache Cassandra是柱状数据库的另一个例子,它处理跨多个服务器的大量数据负载,使数据高度可用。其他数据库还包括专为分析设计的 Apache HBase、Hypertable和Druid。这些数据库支持Outbrain、Spotify 和 Facebook等平台的某些功能。

列族类型

  • 标准列族。这种列族类型类似于表;它包含一个键值对,其中键是行键,值存储在列中,使用它们的名称作为标识符。
  • 超级列族。超级列代表列数组。每个超级列都有一个名称和一个值,将超级列映射到几个不同的列。相关的超级列关联在超级列族的单行种。与关系数据库相比,这就像数据库中几个不同表。想象一下,你可以查看单行的列和值,这是跨多个不同表的单个标识符,并且能够将它们全部存储在一个地方:这就是超级列族。

列式数据库的优势

  • 可扩展性。这是主要优势,这也是企业使用此类数据库存储大数据的主要原因之一。它能够根据数据库的规模分布在数百台不同的机器上,支持大规模并行处理。这意味着它可以使用多个处理器同时处理同一组计算。
  • 压缩。它们不仅具有无限的可扩展性,而且还擅长压缩数据,从而节省存储空间。
  • 反应灵敏。加载时间最短,查询执行速度快,这是因为它们被设计为支持大数据,并适用于分析。

列式数据库的缺点

  • 在线事务处理。对于在线事务处理,这些数据库不是很高效,不如在线分析处理。这意味着它们不太擅长更新事务,但旨在分析它们。这就是为什么我们看到这些数据库用于保存业务分析所需的数据,而关系数据库在后端存储数据。
  • 增量数据加载。如上所述,通常列式数据库用于分析并且可以快速检索数据,即使在处理复杂查询时也是如此,因为数据在列中紧密联系。虽然增量数据加载并非不可能,但列式数据库并不能以最有效的方式执行它们。首先需要扫描列以识别正确的行,然后进一步扫描以定位需要覆盖的修改数据。
  • 特定于行的查询。正如上面提到的缺点,这一切都归结为同一问题,即为正确的目的使用正确类型的数据库。对于特定于行的查询,你会引入额外的步骤,即扫描列以识别行,然后定位要检索的数据。访问分散在多列中的单个记录需要很多时间,而访问单个列中的分组记录会更快。频繁的行特定查询可能会降低列式数据库的速度,从而导致性能问题,这无疑违背该数据库的设计初衷,它是专为帮助快速获取所需信息而设计。

NoSQL数据库主要是为满足特定目的而设计,不应用作一般类型的存储。宽列数据库是列式而不是行式,它主要用于存储和查询大数据。该类型中有很多不同的数据库可用,在寻找最合适的数据存储解决方案时,你应该探索它们的功能。