Proof of SQL Benchmarks结果分析:不同查询类型的性能对比

Proof of SQL Benchmarks结果分析:不同查询类型的性能对比

【免费下载链接】sxt-proof-of-sql Space and Time | Proof of SQL 【免费下载链接】sxt-proof-of-sql 项目地址: https://gitcode.com/GitHub_Trending/sx/sxt-proof-of-sql

在数据密集型应用中,SQL查询性能直接影响系统响应速度和用户体验。Space and Time的Proof of SQL技术通过零知识证明(Zero-Knowledge Proof)确保查询结果的真实性,同时需要兼顾性能开销。本文基于crates/proof-of-sql-benches/src/utils/queries.rs中的基准测试数据,对比不同查询类型在Hyper-KZG和Dynamic Dory两种承诺方案下的性能表现,为开发者优化查询策略提供参考。

测试环境与方法论

测试配置

Proof of SQL基准测试框架支持多种查询类型和数据规模,核心测试参数如下:

  • 承诺方案:Hyper-KZG(默认)和Dynamic Dory(动态电路优化)
  • 数据规模:10,000至100,000,000行(run_benchmarks.py中的table_sizes参数)
  • 查询类型:过滤(Filter)、聚合(Aggregate)、连接(Join)等15种常见操作(详见queries.rsall_queries()函数)

性能指标

测试结果通过results_io.rs记录,核心指标包括:

  • 证明生成时间(generate_proof (ms)):生成零知识证明的耗时
  • 证明验证时间(verify_proof (ms)):验证证明有效性的耗时

查询类型性能对比

基础查询:过滤与投影

过滤查询(Filter) 通过简单条件筛选数据,例如:

SELECT b FROM bench_table WHERE a = $1;

在100万行数据下,Hyper-KZG方案的证明生成时间约为800ms,验证时间稳定在20ms以内。而复杂过滤(ComplexFilter) 包含多条件组合(如(a = $1 AND b = $2) OR (c = $3 AND d = $4)),性能开销增加约30%,主要由于逻辑电路复杂度上升。

聚合查询:Sum与Group By

聚合查询(Aggregate) 涉及多行数据计算,例如:

SELECT SUM(a) AS foo, COUNT(1) AS values FROM bench_table WHERE a = b OR c = $1;

测试显示,Group By操作在10万行数据下的证明生成时间达1.2秒,显著高于简单过滤。这是因为聚合函数需要对中间结果进行多项式约束,尤其当分组键(GROUP BY b)基数较大时,约束数量线性增长。

连接查询:Join与Union All

内连接(Join) 是性能开销最高的操作之一:

SELECT t1.a, t2.a FROM bench_table t1 JOIN bench_table_2 t2 ON t1.a = t2.a;

在10万行×2表的场景下,Hyper-KZG的证明生成时间超过5秒,而Dynamic Dory通过电路优化可将耗时降低40%。这是因为连接操作涉及笛卡尔积约束,需验证两表数据的关联性。

承诺方案性能对比

Hyper-KZG vs Dynamic Dory

HyperKZG性能对比

  • Hyper-KZG:适用于大规模数据(1000万行以上),证明大小较小(约1KB),但生成时间随数据量呈线性增长。
  • Dynamic Dory:通过动态电路生成优化小规模查询(100万行以下),例如LimitOffset查询在10万行数据下生成时间仅需300ms,比Hyper-KZG快50%。

数据规模敏感性

随着数据量从10万行增长到1000万行:

  • Join查询的证明生成时间从1.5秒增至12秒(Hyper-KZG)
  • LimitOffset查询SELECT column FROM bench_table LIMIT 10 OFFSET 5)性能基本稳定,验证时间波动小于5%,适合分页场景。

优化建议

查询重构策略

  1. 拆分复杂查询:将ComplexFilter拆分为多个简单过滤+应用层合并,例如:

    -- 原查询
    SELECT * FROM t WHERE (a=1 AND b=2) OR (c=3 AND d=4);
    -- 优化后
    SELECT * FROM t WHERE a=1 AND b=2
    UNION ALL
    SELECT * FROM t WHERE c=3 AND d=4;
    

    通过UnionAll查询测试,性能可提升15%-20%。

  2. 避免大表连接:使用预计算中间结果(如物化视图),减少Join操作的数据量。例如将Join查询拆分为单表过滤+应用层关联。

承诺方案选择

  • 数据量≤100万行:优先使用Dynamic Dory,通过run_benchmarks.py-s dynamic-dory参数启用
  • 数据量>1000万行:Hyper-KZG的线性扩展性更优,且证明大小优势显著

总结与展望

Proof of SQL的性能瓶颈主要集中在复杂逻辑和大数据量聚合操作。通过合理选择查询类型和承诺方案,可在安全性与性能间取得平衡。未来优化方向包括:

  1. 电路优化:针对高频查询类型(如Filter、Aggregate)设计专用约束电路
  2. 并行计算:利用多核CPU加速多项式求值(参考benchmark_accessor.rs的并行化设计)
  3. 硬件加速:通过GPU优化Hyper-KZG的FFT运算(可参考docs/HyperKZG_A100_2025.07.22.png的A100显卡测试数据)

开发者可通过crates/proof-of-sql-benches目录下的工具,自行测试特定查询场景的性能表现,进一步优化应用逻辑。

【免费下载链接】sxt-proof-of-sql Space and Time | Proof of SQL 【免费下载链接】sxt-proof-of-sql 项目地址: https://gitcode.com/GitHub_Trending/sx/sxt-proof-of-sql

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值