KDB+数据库——分段表

2022-05-25 00:00:00 查询 数据 分区 目录 分段

一、分段表

前面我们介绍了分区表的创建与查询,同时也介绍了分区查询的机制。当q启动会话但是不带salve的时候,这只是一个内存上的提升,但是性能上并没有提升(除非减少所需的数据操作量)。当q启动的时候带有slaves的时候,就可以在性能方面上得到一个替身。

在大型时间序列数据库中,查询通常是I / O绑定的。在这种情况下,在I/O通道较少的情况下,分区查询的多个从属设备大部分时间都是在等待I/O的通道上。该解决方案需要多个I/O通道,以便数据检索和处理可以并行进行。Kdb +提供了另一级数据分解,以便在此方案中启用并行处理。那就是分段的思想。

1. 定义与分段方式

分段表是分区表的一个更别的结构,分段将是将具有相同结构的的根目录的分区表扩展到多个目录下结构。每个段都是一个包含分区目的集合目录。段目录可能位于独立的I / O通道上,因此数据检索可以并行进行。

可以使用任何条件来分解分区切片(但是在分区表中只能采用数字类型的分区指标),只要结果符合表中的数据不相交且分段后记录完整,即重构原始表没有遗漏或重复。分解可以沿着行,沿着分区或者通过它们的某种组合,但是不能仅沿着列来分解,因为所有记录必须符合分解的要求。

重要:须确分段后记录的数据完整,而且不能交叉,因为kdb +在写入数据文件时不会检查这一点。特别是,重叠段将导致查询结果中出现重复记录,不完整分解将导致记录丢失。

可以将分段表看成一个三维的结构:首先是扩展的形式按照列来分割,然后再通过水平进行分区,后在整个物理结构上进行分段。分段的主要目的是能够并行使用多个I/O通道和并发处理。我们可以从下面的结构图来理解分段表。

分段表结构示意图

这里的每一个小方框都是一个分区后的实例。

与分区表位于根目录下的布局相反,分段目录不能位于根目录下,根目录下只包含两个文件,一个是par.txt文件,一个是sym文件。par.txt文件中包含段的物理位置的路径,每行一个段路径。

下面的图是本地的文件结构图:

张图是创建好分段表后的文件目录,这里db就是根目录,文件夹1和文件夹2就是我们分段目录。可以看到目录1和目录2不在我们的根目录db下。

图一

第二张图是我们的层级结构目录,我们可以看到目录1和目录2下面的对应的分区目录和扩展目录。这里分区目录就是2019.01.01等,扩展目录就是t。

图二

第三张图就是我们的根目录下的文件,根目录下只包含par.txt文件和symbol数据的枚举的sym文件。

图三

第四张图就是par.txt文件中的内容,可以看到就是我们非分段目录的根目录,每个段是一行。

图四

第五张图就是我们的扩展表t下面的文件,都是包含具体表的数据信息。

图五

我们可以从下面的本地系统目录文件结构中来理解分段表:

/db
   [sym]
    par.txt
=============== <- 通道 1
/segment1
   /partition*
     /table*
     /table*
       …
 /partition*
     /table*
     /table*
     …
=============== <- 通道2
/segment2
  /partition*
     /table*
     /table*
      …
 /partition*
    /table*
    /table*
    …
=============== …

相关文章