【问题标题】:How Column Oriented Database stores data in disk?面向列的数据库如何将数据存储在磁盘中?
【发布时间】:2020-09-08 03:15:38
【问题描述】:

我正在浏览video,它讨论了面向列的数据库并很好地解释了这些概念。但是,我没有从视频中得到的是,面向列的数据库如何将数据存储到磁盘中?或

Cassandra 如何在磁盘中存储数据?我读过一个类似的问题:Why many refer to Cassandra as a Column oriented database?,但接受的答案或任何答案都没有说明数据是如何存储在磁盘中的。

我了解列式数据库的好处以及究竟是什么。每列数据都存储在磁盘中的单独文件中。假设如下所示。 比如说,表名:CarOwner 和主键:Id

Row Oriented: Each record is stored together in the disk, probably in the same block.
Id  |   Name   |   Car   |   Age 
----------------------------------
1   |   John   |   BMW   | 34
2   |   Terry  |   Audi  | 31
3   |   Josh   |   Tesla | 24
4   |   Dan    |   Ford  | 50

我行存储查找是直截了当的。您可以在每个时钟扫描匹配过滤器,或者如果查询键被索引,则在引用索引后获取相应的块。

磁盘中的面向列的结构:“假设”

Name File:- say starts at block block1 in disk
John
Terry
Josh
Dan

Similarly, Car and Age are stored in separate files.

如果我想获取给定 ID 的姓名和汽车,我们是否需要维护和引用如下文件?

1 : {Name: block1-offset1, Car: block4-offset1,...}
2 : {Name: block1-offset4, Car: block4-offset3,...}
3 : {Name: block1-offset7, Car: block4-offset5,...}

这是在列存储中查找键的方式吗?如果这是正确的,还有其他存储方式吗?

Cassandra 如何存储其数据?因为它也被归类为面向列的数据库。

【问题讨论】:

    标签: cassandra column-oriented


    【解决方案1】:

    Cassandra 将数据与documentation 中提到的其他文件一起存储在磁盘上的SSTables 中。 当通过key查询数据时(假设它不在memtable中)它会检查索引文件,该文件指向SSTable文件中搜索数据的位置。

    【讨论】:

      猜你喜欢
      • 2011-05-06
      • 2020-06-13
      • 2011-05-17
      • 2011-01-13
      • 2017-05-22
      • 2011-03-23
      • 1970-01-01
      • 2016-08-20
      相关资源
      最近更新 更多