AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 225920
Accepted
Jigao
Jigao
Asked: 2018-12-29 06:23:48 +0800 CST2018-12-29 06:23:48 +0800 CST 2018-12-29 06:23:48 +0800 CST

“物化”是什么意思?

  • 772

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

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

语境

我从中学习的来源:Jens Dittrich 博士教授的 Youtube 视频:将关系映射到设备。

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

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

terminology
  • 2 2 个回答
  • 3832 Views

2 个回答

  • Voted
  1. Evan Carroll
    2018-12-30T16:21:16+08:002018-12-30T16:21:16+08:00

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

    • 流水线
    • 物化

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

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

    该过程是无状态的。最终构建了一个管道,并且在该管道的某个地方发生了魔法(一般规则是越早越好)。

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

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

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

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

    真实世界验证

    • PostgreSQL,我会敦促您在这里搜索整个代码库以查找“materialization”。它经常被使用。您可以看到一种流行的情况,nodeMaterial.c即调用tuplestore_begin_heap以获取存储结果集的位置
    • MySQL 在半连接、子查询、聚合和窗口函数代码的上下文中使用它。此外,他们有一个MATERIALIZATION这样记录的提示,

      优化器使用物化来实现更有效的子查询处理。物化通过将子查询结果生成为临时表(通常在内存中)来加速查询执行。MySQL 第一次需要子查询结果时,会将结果具体化到一个临时表中。任何后续需要结果时,MySQL 都会再次引用临时表。优化器可以使用哈希索引对表进行索引,以使查找快速且成本低。索引包含唯一值以消除重复并使表更小。

    有问题的视频。

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

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

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

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

    选择的答案

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

    这在任何研究或数据库用语中都是不正确的,我会质疑所有使用的声明malloc,memcpy或者正如作者继续所说fork的(或不使用)COW 是“物化”的说法。如果它们以其他方式引用我上面描述的机制,它们可能是物化的“一部分”。

    • 6
  2. Best Answer
    Prof. Dr. Jens Dittrich
    2019-01-06T02:38:38+08:002019-01-06T02:38:38+08:00

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

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

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

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

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

    例如,假设你在 unix 中 fork 一个子进程。看起来该过程具有数据的物理副本,对吗?不,它没有。只有通过写时复制,您才会收到物理副本。所以,有时物化和不物化之间的界限会变得模糊。

    希望有帮助。

    • 3

相关问题

  • 根据数据库完整性的数据有效性和准确性

  • 在 SQL 中,它是复合键还是复合键?

  • 什么是残差谓词?

  • “‘连接’表”是否与弱实体相同?

  • 软件工程师和 DBA [关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve