Hotdry.
systems

UPP:通用谓词下推至智能存储的异构查询优化

UPP 通过专用ISA和位向量机制,实现谓词下推到智能存储,提升异构分布式数据库的查询卸载效率与性能参数。

在异构分布式数据库环境中,查询性能瓶颈往往源于海量数据扫描与谓词过滤的计算开销。传统谓词下推仅支持简单比较运算,无法应对现代 OLAP 查询中的复杂表达式如范围判断、字符串匹配及函数组合。UPP(Universal Predicate Pushdown)提出了一种硬件 / 软件协同设计方案,将任意 “通用谓词” 编译为紧凑指令集,直接在智能存储设备(如集成 FPGA 的 SmartSSD)执行初步过滤,从而大幅减少主机侧数据传输与 CPU 负载,实现高效查询卸载。

UPP 的核心在于构建一个专为谓词评估优化的指令集架构(ISA),避免为每个运算符硬编码硬件逻辑。数据库引擎在查询规划阶段识别支持的过滤模式,将 WHERE 子句编译为 UPP 指令序列及查询向量(Query Vectors, QVs)。存储侧 FPGA 通过位运算执行这些指令,仅返回可能匹配的行(best-effort 过滤,确保无假阴性)。例如,对于数值列 l_quantity >= 20 AND <= 30,系统预先将列值分桶(如 [0,10), [10,20) 等),行向量(Row Vectors, RVs)中对应位设 1;查询时 QV 设置交集桶位,位与 AND 后全 0 即过滤掉该行。

行向量的设计是 UPP 高效性的关键。每行固定 256 位 RV,按列分区分配位宽(如 8 列各 32 位)。数值列采用单调函数分桶:预处理扫描数据集,计算列极值,分成固定桶数(推荐 16-64 桶 / 列,根据位宽),值落入多桶时哈希映射位。字符串列令牌化:提取高频词(阈值 top-1% 频率),哈希至位,多令牌设多位。复杂谓词如 l_shipinstruct = 'DELIVER IN PERSON' 分解为三令牌,QV 设对应位,RV 需全匹配位才通过。这种近似过滤容忍假阳性,由主机精确重验,确保正确性。

在异构环境中,UPP 的通用 ISA 确保跨设备兼容:不同 FPGA 或加速器暴露同一接口,上层引擎(如 Spark、DuckDB)生成适配程序。实验显示,在 100GB TPC-H 数据集上,Spark 查询端到端加速 1.2×~7.9×,数据传输减 87%,能耗降 9%~87%。[1] 此得益于过滤率高(TPC-H 字符串高频令牌匹配好),FPGA 资源占用低(LUT<5%,BRAM<10%),易集成 SmartSSD。

落地 UPP 需关注可操作参数与清单:

  1. 预处理配置

    • RV 大小:256 位起步,扩展至 512 位若列多 > 20。
    • 桶数 / 列:位宽 / 4 ~ 位宽 / 2(e.g., 32 位列用 8-16 桶),数据倾斜时动态调整。
    • 字符串阈值:保留频率 > 0.1% 的令牌,哈希冲突率 < 5%(双哈希)。
    • 开销阈值:预处理 < 5% 数据集大小,增量更新每小时。
  2. 编译器集成

    • 查询规划扩展:识别单调函数、等值 / LIKE,限深度 3 嵌套。
    • ISA 指令:AND/OR/NOT(各 1 周期)、CMP(2 周期),程序 < 128 指令。
    • 向后兼容:fallback 至主机过滤若谓词不支持。
  3. 存储侧部署

    • FPGA 比特流:UPP 引擎 + SSD 固件,资源预算 LUT20%、DSP5%。
    • 接口:NVMe 扩展命令下发 UPP 程序 + 位图返回。
    • 异构集群:统一 API,负载均衡按设备过滤率。
  4. 监控与调优

    • 指标:过滤率 > 70%、假阳性 <10%、数据减量> 50%。
    • 阈值警报:过滤率 <50% 触发重分桶;延迟> 2x 基线回滚。
    • A/B 测试:并行部署,QPS 提升 > 20% 全推。

风险控制:数据动态性高时,预处理失效(缓解:增量重建,周期 1h);哈希碰撞升假阳性(双哈希 + bloom 辅助);硬件异构下 ISA 兼容(标准化测试套件)。回滚策略:查询启动时能力协商,支持率 < 80% 用传统下推。

UPP 为智能存储注入通用计算力,适用于云原生湖仓架构。未来可扩展至 DPU / 向量引擎,结合 Learned Index 进一步提效。

资料来源: [1] Ipoom Jeong et al., UPP: Universal Predicate Pushdown to Smart Storage, ACM/IEEE ISCA 2025. https://dl.acm.org/doi/10.1145/3695053.3731005

[2] Dangling Pointers Blog. https://danglingpointers.substack.com/p/upp-universal-predicate-pushdown

(正文约 1250 字)

查看归档