这些术语之间有很多混淆。我想通过我的理解,看看人们是否同意。我在网上看到了相互矛盾和错误的定义。
在我看来,宽列和列族数据库本质上是一回事。他们是
- 数据由一组键值对(每个称为列)在逻辑上组织;
- 由唯一的行键标识;
- 每行可以有可变的长度或列的定义和
- 一个接一个地存储在磁盘上。所以列族(宽列)表类似于关系数据库的表,因为它们仍然按行组织。
主要区别在于它们没有固定的列模式,并且显然不能进行表连接。
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