目录文档-技术白皮书06-EFT.WP.Core.DataSpec v1.0

第6章 分区、索引与查询


I. 范围与对象


II. 术语与目标

  1. 目标:最小化扫描体积与 I/O 放大,最大化裁剪与命中率,保证 pk 与契约查询的确定性。
  2. 术语:
    • K = [k1,k2,...,kd](分区键序) ,B_i = card(partition on ki)。
    • sel(P) = |{ r ∈ R : P(r) }| / N(选择率)。
    • C_proj(投影列集),alpha = |C_proj| / |Fields_total|(投影率)。

III. 公设(P66-*)


IV. 分区策略与命名规范


V. 分区键选择的代价模型(S66-1)

  1. 设顶层至第 d 层分区桶数向量 B = [B1,...,Bd],谓词在各键上的匹配比例 f = [f1,...,fd]。
  2. 近似独立时(显式 approx independence):
    • E[parts(P)] approx prod_{i=1..d} ceil( fi * Bi )。
    • V_scan approx E[parts(P)] * avg_bytes_per_part * ( alpha / ratio_compress )。
    • L approx seek_cost * E[parts(P)] + V_scan / throughput_io。
  3. 选键准则:在候选集上最小化 E[parts] 与 L,并约束 B_i 不超过目标元数据开销。

VI. 时间序列分区规范


VII. 空间与路径分区规范

  1. 空间:
    • gh = geohash(lon,lat,p),格网角尺度近似 tile_deg ≈ 180 / 2^p;p 由期望空间选择率与热点分布确定。
    • 记录 CRS 且对 lon/lat/alt 使用 float64;跨 CRS 查询需归一化后再下推。
  2. 路径 gamma(ell):
    • 以 K = [pid, ell_bucket] 分区,并在行组层使用连续 ell 区段;
    • 对 T_arr 数据集保留两口径结果与 delta_form 字段,支持区段级聚合。

VIII. 目录与文件命名(与 manifest 对齐)


IX. 索引类型与存储绑定

  1. 主索引:
    pk 聚簇(按 pk 排序或哈希分桶),保证等值查询 O(log N) 或 O(1) 桶定位。
  2. 二级索引(idx_k):
    • B+tree:适合范围查询与有序扫描(ts、ell、数值区间)。
    • hash:高基数等值查询(uid、rid)。
    • bitmap:低基数维度(sid、质量标签、枚举);支持位运算复合谓词。
    • inverted:文本与多值标签(tags[])。
  3. 列式辅索:
    • 区段统计(zone map):[min_i,max_i];若与谓词区间不相交则裁剪。
    • Bloom 过滤:对热列启用;假阳率 p_fp approx ( 1 - exp( -k * n_elem / m_bits ) )^k。
    • 字典与游程编码:提升位图与范围剪枝效果。

X. 复合索引与前缀规则(S66-2)


XI. 查询规范与下推顺序

  1. 谓词标准形:P = CNF( conj_i disj_{i,j} pred_{i,j} ),字段与常量单位须通过 unit(dim) 归一。
  2. 下推顺序:
    • 分区裁剪(基于目录键与 manifest.stats)。
    • 列区段裁剪(zone map 与 Bloom)。
    • 二级索引查找(idx_k 命中)。
    • 行过滤与 m=1 掩码应用。
    • 投影 C_proj 与聚合。
  3. 质量过滤惯例:WHERE m = 1 AND q_score >= q_min。

XII. 典型查询模板

  1. pk 等值:SELECT * WHERE pk = rid,路径:idx(pk) → 定位 → 单行返回。
  2. 时间窗:SELECT C_proj WHERE ts ∈ [t0,t1),路径:分区裁剪 date/hour → zone map → 行过滤。
  3. 空间窗:SELECT * WHERE gh IN {tiles} AND CRS = ref,路径:格网集合裁剪 → 二级索引或行过滤。
  4. 路径段:SELECT C_proj WHERE pid = p AND ell ∈ [a,b),路径:K=[pid,ell_bucket] 裁剪 → B+tree(pid,ell) 扫描。
  5. T_arr 区段聚合:
    • T_arr(factored) = ( 1 / c_ref ) * ( ∑ over rows n_eff * Δell );
    • T_arr(general) = ( ∑ over rows ( n_eff / c_ref ) * Δell );
    • delta_form = | T_arr(factored) - T_arr(general) | 并断言 delta_form ≤ tol_Tarr。

XIII. 一致性与契约检查


XIV. 流程 Mx-4(分区与索引构建)


XV. 运行参数与基线建议


XVI. 实现绑定(I60 对齐)


XVII. manifest 扩展字段(分区与索引)


XVIII. 变更与兼容


版权与许可(CC BY 4.0)

版权声明:除另有说明外,《能量丝理论》(含文本、图表、插图、符号与公式)的著作权由作者(“屠广林”先生)享有。
许可方式:本作品采用 Creative Commons 署名 4.0 国际许可协议(CC BY 4.0)进行许可;在注明作者与来源的前提下,允许为商业或非商业目的进行复制、转载、节选、改编与再分发。
署名格式(建议):作者:“屠广林”;作品:《能量丝理论》;来源:energyfilament.org;许可证:CC BY 4.0。

首次发布: 2025-11-11|当前版本:v5.1
协议链接:https://creativecommons.org/licenses/by/4.0/