7

这些术语之间有很多混淆。我想通过我的理解,看看人们是否同意。我在网上看到了相互矛盾和错误的定义。

在我看来,宽列和列族数据库本质上是一回事。他们是

  1. 数据由一组键值对(每个称为列)在逻辑上组织;
  2. 由唯一的行键标识;
  3. 每行可以有可变的长度或列的定义和
  4. 一个接一个地存储在磁盘上。所以列族(宽列)表类似于关系数据库的表,因为它们仍然按行组织。

主要区别在于它们没有固定的列模式,并且显然不能进行表连接。

3 行(列族)的示例:每行具有不同的长度和/或列。但在磁盘上rowkey1的整个内容是一条连续的行,后面是类似于关系数据库的其他行

rowkey1 k1-v k2-v k3-v

rowkey2 k1-v k4v

rowkey3 k2-v k4-v k5-v

另一方面,术语 columnar DB 是相同的面向列的 DB。它们一次存储一列,而不是一次存储在磁盘上。它非常适合时间序列或任何多序列分析目的。每列具有相同类型的数据并存储在一起的事实允许更好的数据压缩作为额外的好处。

一个例子:

在此处输入图像描述

在磁盘上:

a:1 b:2 c:3 d:4

10:1 9:2 8:3 7:4

4

1 回答 1

3

维基百科的定义也有助于进一步:

Bigtable 和 Apache Cassandra 等宽列存储并不是该术语最初意义上的列存储,因为它们的两级结构不使用列式数据布局。在真正的列存储中,采用列式数据布局,每列单独存储在磁盘上。宽列存储通常支持单独存储的列族的概念。但是,每个这样的列族通常包含多个一起使用的列,类似于传统的关系数据库表。在给定的列族中,所有数据都以逐行方式存储,以便给定行的列存储在一起,而不是每列单独存储。支持列族的宽列存储也称为列族数据库。

参考:https ://en.wikipedia.org/wiki/Wide-column_store

于 2021-01-02T05:57:10.003 回答