“物化”是什么意思?

Jig*_*gao 5 terminology

在学习“数据布局”时,我遇到了“物化”这个词,它没有明确的定义和解释。什么是物化,物化有什么作用?

这个问题与物化视图无关,也不特定于任何特定的 DBMS。

语境

我正在学习的来源:Youtube Video from Prof. Jens Dittrich : Mapping Relations to Devices

在时间点 9:24我们有这个术语materialize。他说这是一个从物理页面到存储设备的过程。

以及此时补充一个问题:既然物理页也应该属于主存,如果我们有一个主存数据库,那么数据布局只存在于主存中,会不会有一个物化过程?

Eva*_*oll 6

与流行的误解相反,“物化”与将任何内容写入磁盘或“存储”层无关。在执行查询的过程中,您有两个独立的概念,

  • 流水线
  • 实体化

这里的基本思想是,给定类似WHERE子句的东西,你可以

  • 在检索中添加选择性,
  • 在管道末端添加选择性,

该过程是无状态的。最终,一条管道被构建起来,并且在管道中的某个地方发生了奇迹(一般规则是越早越好)。

让我们看一个排序,你如何在管道中排序1, 5, 3?你不能。这意味着如果该表不是由该字段聚集的,您唯一的选择是

  • 声明一个事物“结果集”
  • 写完那个“结果集”
  • 处理它(在这种情况下排序)
  • 继续前行

那个“东西”,更典型的是“物化结果集”是一个“关系”,它本身通常像任何其他受所有相同操作的表一样建模。

物化可能是问题需求(如排序)、资源短缺或规划器限制的结果——在 PostgreSQL 中,CTE 是一个优化栅栏。这意味着 CTE 外部的优化不能下推到 CTE。为什么?因为在 CTE 完成时:它的结果在某处(或磁盘上)的缓冲区中,流水线的步骤就结束了。

真实世界验证

有问题的视频。

我建议忽略视频的这一部分。他将“物化”定义为从“物理页面到存储设备”的步骤。这在任何实践中都不是该术语的定义。

  • 对于 DBA 而言,“物化”是指我上面所说的。
  • 出于芯片设计和内核设计的目的,物理页面和虚拟页面之间存在差异。

    • 物理页面在硬件中并且是连续的。“页面”是 CPU 可访问内存的一个单元(x86 上为 4096 字节)。之所以称为“物理页面”,是因为您通常无法直接访问它,并且不会在任何级别向您公开。
    • 逻辑页是内核可以访问的软件中的一个可访问内存单元。

例如,在 x86 平台中,分页是在长模式 (x86_64) 下打开的,如果不通过“逻辑页”,您将无法访问物理内存。他称从逻辑页面到物理页面的解析过程为“去虚拟化”。我从来没有听说过这个,他可能也没有听说过,因为它是 CPU 上微码的一个功能,而且都是专有的,所以命名它执行的单个进程有点没用。出于同样的原因,“物化”似乎同样无用,而且更令人困惑。如果你知道物理页面,你怎么可能知道存储设备?如果它是物理的,则不会进一步抽象。这个方案中的逻辑<->物理映射是什么意思?反正对我来说很陌生

选择答案

在数据库研究中,术语“物化”表示任何形式的数据存储,即最终在任何存储层上实际设置一些字节的任何操作。示例包括深度复制、内存分配、复制、物化视图(而不是动态视图)、管道内物化,以及沿存储层次结构的任何形式的(部分)复制。

这在任何研究或数据库用语中都是不真实的,我会挑战所有使用mallocmemcpy或者正如作者继续所说的fork有(或没有)COW 是“物化”的说法。如果它们另外指的是我上面描述的机制,它们可能是物化的“一部分”。


Pro*_*ich 3

我的视频介绍了为了将关系一直映射到硬件而必须进行的不同映射。在实践中,这些不同的映射和线性化步骤经常被混淆和混合。这是不幸的,因为针对某些映射步骤采取的不同的(通常是硬编码的)决策可能会影响以后的查询性能。有时,这些映射之一的简单更改可能会产生全新的产品线(例如“列存储”、PAX/Parquet)。

在数据库研究中,术语“物化”表示任何形式的数据存储,即最终在任何存储层上实际设置一些字节的任何操作。示例包括深度复制、内存分配(不要与 malloc() 混淆)、复制、物化视图(而不是动态视图)、管道内物化,以及沿存储层次结构的任何形式的(部分)副本。

在视频中,我介绍(并简化)了不同的映射步骤。数据库中的世界的简化视图是所有内容最终都存储到物理页中。物理页是数据库研究中的一个固定术语。但请确保您明白它只是一个抽象概念。它是 DBMS 中的一个存储单元。在讨论某些概念(例如查询处理)时,我们可以安全地忽略这些物理页面(暂时)发生的情况。这就是我在视频中 9:26 所做的事情,因为这不是关于硬件的课程:我说物理页面中的数据被具体化到存储设备。再说一次:后者是一个更长的故事,例如 ACID 的因素,特别是“D”,恢复,CC,......

但请注意,物理页与物理内存不同,物理页被映射到主存页(几乎总是虚拟内存提供的虚拟页)或映射到其他设备,例如设备上的页。硬盘或SSD。大多数设备也在内部虚拟化,例如一些SSD内部使用RAID 5。

当然,对于虚拟内存、快照和不同形式的存储间接,这个术语有时有点难以理解。有时你相信你会实现,但是......

例如,假设您在 unix 中派生了一个子进程。看起来该进程具有数据的物理副本,对吗?不,还没有。只有通过写时复制,您才会收到物理副本。因此,有时实现与不实现之间的界限变得模糊。

希望有帮助。