Metric 引擎
概述
Metric 引擎用于存储包含大量小型指标表的负载。
它将这些逻辑表映射到共享的物理宽表,使其复用列和元数据,从而降低每张表的存储开销并改善列式压缩。
概念
Metric 引擎引入了两个新的概念,分别是逻辑表与物理表。从用户视角看,逻辑表与普通表完全一样。从存储视角看,物理 Region 就是一个普通的 Region。
逻辑表
逻辑表,即用户定义的表。与普通的表都完全一样,逻辑表的定义包括表的名称、列的定义、索引的定义等。用户的查询、写入等操作都是基于逻辑表进行的。用户在使用过程中不需要关心逻辑表和普通表的区别。
逻辑表是虚拟表,本身不直接存储数据。Metric 引擎将其读写请求映射为对应物理表的请求。
物理表
物理表是真实存储数据的表,它拥有若干个由分区规则定义的物理 Region。
架构及设计
Metric 引擎的主要设计架构如下:
Metric 引擎将物理存储和查询交给 Mito 引擎。每个物理 Region 组包含一个数据 Region 和一个元数据 Region:数据 Region 保存映射到该 Region 组的逻辑表数据,元数据 Region 保存逻辑表及逻辑列的映射。
关联到同一物理表的逻辑表使用相同的分区布局。写入时,Metric 引擎为每行数据记录逻辑表身份;读取时,它在扫描物理 Region 前增加逻辑表过滤条件。
逻辑表的路由只保存所属物理表的 ID,再由物理表路由解析出持有 Region 的 Datanode。逻辑路由本身不记录 peer,因此迁移物理 Region 只需改写一条物理路由,而不必改写映射到它的每一条逻辑路由。
逻辑表支持普通的 INSERT、DELETE 和 SELECT 操作。直接写入物理 Region 会绕过逻辑表映射,因此会被拒绝;物理表仍然可以查询。
批量 DDL 用于减少大量逻辑表同时创建或更新时的元数据操作,例如 Prometheus Remote Write 自动建表或物理 Region 迁移。