NoSQL的列式数据模型
为了有效地适应各种数据并满足不断增长的数据存储需求,使用非常规数据库类型的趋势正在上升。关系数据库多年来一直是标准。然而,随着市场的演变和存储成本的下降,非关系数据库正变得越来越流行。
列式数据库适合这种情况。这些NoSQL数据库专为具有挑战性、复杂的查询而设计。与关系数据库不同,列式数据库按列而不是按行存储数据。通过组合这些列来创建子组。
这种类型的数据库具有可移动的键和列名。同一列族或列组的成员之间可以存储的行数和数据类型各不相同。
当需要大型数据模型时,最常使用这些数据库。它们对于数据仓库非常有用,并且在需要高性能或处理苛刻的查询时也很有用。
列式数据库中发生了什么
关系数据库作为具有行和列的表工作,并具有预定的模式。宽列数据库的模式类似但不同。它们也包括列和行。然而,它们具有动态模式,而不是固定在表中。每一列都单独保存。如果存在相关的或相似的列,则将它们组合成列族,然后将其与其他列族分开存储。
每个列族的初始列(称为行键)充当行标识符。此外,每个后续列都有一个列键(名称)。它允许通过识别行内的列来查询列。列键之后是值和时间戳,提供数据条目或修改时间的记录。
每行的关联列数及其名称可能不同。换句话说,数据库的列并不都具有相同数量的行。与空着不同,在宽列数据库中,对于给定列,这些行根本不存在。
行定向模型
序号 |
教师姓名 |
系别 |
ID |
---|---|---|---|
01 |
BK Sarkar |
CSE |
12 |
02 |
Supreeti Kaur |
MECH |
13 |
03 |
Sridher Patnaik |
ECE |
14 |
04 |
Bhaskar Karn |
HMCT |
15 |
列定向模型
序号 |
教师姓名 |
ID |
---|---|---|
01 |
BK Sarkar |
12 |
02 |
Supreeti Kaur |
13 |
03 |
Sridher Patnaik |
14 |
04 |
Bhaskar Karn |
15 |
序号 |
系别 |
ID |
---|---|---|
01 |
CSE |
12 |
02 |
MECH |
13 |
03 |
ECE |
14 |
04 |
HMCT |
15 |
熟悉关系数据库的人知道,每一列都具有相同数量的行,尽管某些列有时具有空值或看起来为空。与空着不同,在宽列数据库中,对于给定列,这些行根本不存在。
键空间中包含列族。类似于模式对关系数据库的功能或意义,每个键空间都包含一个完整的NoSQL数据存储。键空间表示一个无模式数据库,具有数据存储的设计及其自己的一组属性,而NoSQL数据存储没有预定义的结构。
MariaDB是目前最流行的列式数据库之一。它作为MySQL的一个分支而开发,目标是可靠且可扩展,能够处理各种用途和大量查询。Apache Cassandra是另一个列式数据库示例,它可以跨多个服务器处理大型数据负载,并使数据高度可用。此列表中的其他名称包括专注于分析的Druid、Hypertable和Apache HBase。这些数据库支持Outbrain、Spotify和Facebook等网站的特定方面。
列族类型
a)标准列族
这种列族类型具有键值对,其中行键作为键,值使用其名称作为标识符存储在列中,就像表一样。
b)超级列族
超级列表示一个列数组。每个超级列都由一个名称和一个值表示,该值映射到许多不同的列。通过将相关的超级列连接到单行下,形成超级列族。这类似于关系数据库中多个独立表的视图。如果您可以在一个位置存储单行的所有列和值——跨多个不同表的单个标识符——那么您将获得超级列族。
列式数据库的优势
可扩展性。这是一个显著的优势,也是使用这种类型的数据库来存储海量数据的主要理由之一。它提供大规模并行处理,并且可以分布在数百个不同的服务器上,具体取决于数据库的大小。这意味着它可以使用多个处理器同时执行相同的计算集。
压缩。它们不仅无限可扩展,而且还可以有效地压缩数据以减少存储需求。
响应迅速 鉴于它们旨在保留海量数据并对分析有用,因此加载时间很少并且查询执行速度很快。
列式数据库的缺点
联机事务处理。这些数据库对于联机分析处理比联机事务处理有效得多。这意味着虽然它们旨在检查事务,但它们在更新事务方面并不是特别有效。这就是为什么通常看到它们包含业务分析所需的数据,而数据存储在后端的关联数据库中。
增量数据加载如前所述,列式数据库经常用于分析。由于数据紧密地保存在列中,因此即使处理复杂的查询,也很容易获取它们。即使增量数据加载是可行的,列式数据库也不是处理它们的最佳方法。首先必须通过扫描列来找到正确的行,然后必须再次扫描这些列以找到需要覆盖的更改后的数据。
按行查询。这完全取决于为正确的目标使用正确的数据库类型,就像上面列出的可能的缺点一样。通过使用特定于行的查询,您会添加一个额外步骤来识别行,方法是扫描列,然后查找要获取的数据。访问单个列中的捆绑记录比获取分散在多个列中的单个记录更快。在列式数据库中,它专门设计用于帮助您快速获取所需的信息,频繁的特定于行的查询可能会导致性能问题,从而降低数据库的速度,从而削弱其用途。
结论
关系数据库多年来一直是标准。列式数据库适合这种情况。这种类型的数据库具有可移动的键和列名。它们对于数据仓库非常有用,并且在需要高性能或处理苛刻的查询时也很有用。NoSQL 数据库并非旨在用作广泛形式的存储,因为它们通常是为了满足特定需求而创建的。