ColumnStore用户模块
Contents
用户模块管理和控制终端用户查询的操作。它维护每个查询的状态,向一个或多个性能模块发出请求来处理查询,并通过将所有参与性能模块的各种结果集聚合到返回给终端用户的结果集中来解决查询。
用法
用户模块的主要目的是处理并发缩放。它从不直接触及数据库文件,也不需要对它们进行可见性。它以瞬态方式使用机器的 RAM 将部分查询结果组装成完整的答案,然后将其返回给用户。
它负责以下核心功能:
- 将 MariaDB 查询计划转换为 ColumnStore 作业列表。
- 从 MariaDB ColumnStore 系统目录中执行 InfiniDB 对象 ID 查找。
- 检查 Extent Map 以减少 I/O。它通过消除不必要的 Extent 来实现这一点。有关更多信息,请参见存储架构。
- 向性能模块发出指令(有时称为“原始操作”)。
- 根据连接中较小表的大小执行哈希连接。通过向性能模块发送所需的哈希映射来帮助管理分布式哈希连接。
- 执行哈希连接后发生的跨表范围函数和表达式。
- 从性能模块接收数据,在必要时将其重新传输回它们。
- 执行所有聚合和区分处理的后续步骤。
- 将数据返回给 MariaDB 接口。
进程
用户模块包含多个进程,包括 mysqld
、ExeMgr 和 distribution managers。
MariaDB 服务器
用户模块运行 mysqld
。这是运行 ColumnStore 的 MariaDB 服务器。它执行与正常 MariaDB 服务器部署相同的任务:验证连接、解析 SQL 语句、SQL 计划生成和最终结果集分发。
此外,此服务器将 MariaDB 服务器查询计划转换为 ColumnStore 查询计划格式。该格式本质上是一个解析树,但添加了优化器的执行提示,以帮助用户模块将解析树转换为作业列表。
执行管理器
ExeMgr 在 TCP/IP 端口上侦听来自 MariaDB 服务器的查询解析树。它负责将这些查询解析树转换为作业列表。
作业列表表示回答查询所需的指令序列。ExeMgr 遍历查询解析树,迭代生成作业步骤,并在进行优化和重新优化作业列表时进行优化。
作业计划中的主要操作类别是应用列过滤器、处理表连接和投影返回的列。查询计划中的每个操作都由作业列表本身并行执行,并具有完全在用户模块、完全在性能模块或在某些组合中运行的能力。
每个节点使用 Extent Map 确定要发送工作指令的性能模块。有关 Extent Map 的更多信息,请参见存储架构。
分发管理器
除此之外,用户模块还运行 DMLProc、DDLProc 和 cpimport 进程。
DMLProc 和 DDLProc 将 DML 和 DDL 语句分发到适当的性能模块。当 cpimport 在用户模块上运行时,它将源文件分发到性能模块。