94、超高效聚合历史无关的 PADs 技术解析

超高效聚合历史无关的 PADs 技术解析

1. 版本化节点与持久化搜索树

版本化节点是实现部分持久化搜索树的有效技术,每次更新仅需 $O(1)$ 的存储空间来表示逻辑森林。与路径复制不同,版本化节点不仅包含当前子节点的指针,还可指向旧的子节点。具体而言,它仅跟踪两组子节点(存档和当前)以及一个时间戳 $T$。存档指针用于存档前一个版本,$T$ 则指示更新发生的快照时间,以便确定使用存档还是当前子节点指针。

1.1 版本化节点树的工作原理

  • 节点更新规则 :版本化节点的子节点不能更新两次。若节点 $x$ 的子节点需要第二次更新,则会像路径复制那样进行克隆。克隆节点的子节点将设置为新的子节点,同时 $x$ 的父节点也需更新以指向新的克隆节点,若其父节点的存档指针已在使用,可能会递归地导致其父节点也被克隆。
  • Treap 更新操作 :每次对 Treap 进行更新,预计需要 $O(1)$ 次旋转,每次旋转需要更新 2 个版本化节点的子节点,因此每次更新总共需要 $O(1)$ 的存储空间。为支持在单个快照内进行多次更新,每个版本化节点包含一个最后修改版本号。若节点的子节点指针在同一快照内多次更新,可直接在原地更新。与路径复制树一样,将根节点的副本保存在快照数组中,足以用于后续查询数据。

1.2 使 Treap 持久化和可认证

持久化 Treap 是由多个独立 Treap 组成的森林,每个快照对应一个 Treap,每个 Treap 都是具有规定结构的独立认证字典。由于每个快照都是普通的搜索树,基于树的 PADs 自然可以扩展以支持对给定值的后继、前驱等的查询。

1.2.1 不同表示方式的性能和存储成本
  • 全复制方式 :若使用全复制来表示 Treap 森林,成员证明可在 $O(log n)$ 时间内计算。每个节点恰好出现在一个快照中,且每个节点可以缓存其子树认证器。
  • 路径复制方式 :当使用路径复制表示 Treap 森林时,每个节点一旦创建就不可变。以该节点为根的子树是固定的,子树认证器是常量,可直接缓存在该节点上。成员证明可在 $O(log n)$ 时间内计算,更新成本为 $O(log n)$ 存储空间。
1.2.2 版本化节点缓存子树认证器的挑战与解决方案

在 Sarnak - Tarjan 版本化节点中缓存子树认证器会增加额外的复杂性。因为节点的后代不再是不可变的,节点的子树认证器在其出现的所有快照中也不再是常量。为解决这一问题,提出了以下几种缓存策略:
- 全缓存策略 :每次对 Treap 进行更新时,更新路径上每个节点到根节点的缓存。这种策略能确保认证器缓存始终命中,但会失去使用版本化节点的 $O(1)$ 优势,因为维护缓存认证器需要 $O(log n)$ 的成本。生成成员证明需要 $O(log v + log n)$ 时间,用于在子树认证器缓存中进行 $O(log n)$ 次二分查找。
- 中位数层缓存策略 :通过永久缓存树中深度 $D$ 接近中位数层 $\frac{log_2 n}{2}$ 的节点的子树认证器,每次更新只需 $O(1)$ 的存储空间,同时在历史快照中生成成员证明的时间为 $O(\sqrt{n} log v)$。当更新发生时,通常只有叶子节点的值会改变,此时更新祖先中位数层节点的子树认证器缓存,并显式使其他祖先节点的缓存无效。

2. 基于元组的 PADs

基于元组的 PADs 是一种新颖的设计,它使用元组表示字典,能产生恒定大小的查询响应证明,而非基于树的 PADs 的 $O(log n)$ 证明。

2.1 元组表示字典

若字典有键 $k_1, k_2, \cdots, k_n$,且 $k_i < k_{i + 1}$,对应值为 $c_1, c_2, \cdots, c_n$,则将整个键 - ID 空间划分为不相交的区间 $[k_0, k_1), [k_1, k_2), \cdots$。每个区间 $[k_j, k_{j + 1})$ 包含一个字典键 $k_j$ 及其对应值 $c_j$,并表示该区间内没有其他键。这可以用元组 $([k_j, k_{j + 1}), c_j)$ 表示,可正式解读为:“键 $k_j$ 的值为 $c_j$,且字典中区间 $(k_j, k_{j + 1})$ 内没有其他键”。为覆盖字典中第一个键 $k_1$ 之前和最后一个键 $k_n$ 之后的键 - ID 空间,引入两个哨兵元组 $([k_{min}, k_1), \perp)$ 和 $([k_n, k_{max}), c_n)$。

2.2 基于单独签名元组的 PADs

在单个 PAD 中,每个元组由作者单独签名。作者为每个快照签署 $n + 1$ 个元组。为支持持久性,元组包含一个版本号,形式为 $(v, [k_j, k_{j + 1}), c_j)$,可解读为“在版本 $v$ 中,键 $k_j$ 的内容为 $c_j$,且字典中 $k_j$ 和 $k_{j + 1}$ 之间没有其他键”。服务器可通过返回一个签名元组 $T = (v_q, [k_j, k_{j + 1}), c_j)$ 来证明任何键 $k_q$ 在快照 $v_q$ 中的成员资格或非成员资格,该元组需满足 $k_q \in [k_j, k_{j + 1})$。

2.2.1 元组存储优化
  • 合并元组 :通过利用快照之间的冗余性,可以减少元组的存储成本。若假设每次更新后都会生成一个快照,那么除了最多两个签名元组外,快照 $v$ 中的所有签名元组在快照 $v + 1$ 中具有相同的键和值。因此,服务器可以存储一个合并元组 $([v, v + \Delta], [k_j, k_{j + 1}), c_j, SIGS)$,表示从快照 $v$ 到 $v + \Delta$,键空间 $[k_j, k_{j + 1})$ 没有改变。在每个合并元组中,$SIGS$ 存储 $\Delta + 1$ 个签名,分别对应每个单独快照的元组。合并元组本身不进行签名。
  • 使用持久搜索树存储元组 :为了在查找时能够轻松找到合并元组和签名,需要一个数据结构来存储代表每个快照的不同合并元组集合。可以使用支持前驱查询的持久搜索树,如前面提到的 $O(1)$ 持久搜索树数据结构。每个 PAD 中的快照在持久搜索树 $PST$ 中有一个对应的快照,用于存储代表该快照的元组。当更新发生时,作者会指示哪些元组是新的,哪些元组需要删除,其余元组则进行刷新。服务器根据这些指示对 $PST$ 进行相应的操作。

2.3 优化存储:元组替代

通过元组替代,可以将服务器上每个快照的签名存储成本从 $O(n)$ 降低到 $O(1)$。作者签署合并元组 $([v, v’], [k_j, k_{j + 1}), c_j)$,证明在 $[v, v’]$ 内的所有快照中,键 $k_j$ 的值为 $c_j$,且区间 $(k_j, k_{j + 1})$ 内没有其他键。对于刷新的元组,服务器会收到作者签署的新元组 $([v, v’ + 1], [k_j, k_{j + 1}), c_j)$,该元组会替代服务器已有的签名元组 $([v, v’], [k_j, k_{j + 1}), c_j)$。虽然作者每次快照仍需签署 $O(n)$ 个元组并发送给服务器,但除了 $O(1)$ 个新元组外,其余都是刷新现有元组,只有 $O(1)$ 个新元组及其签名会增加服务器的存储。

2.4 迭代哈希函数

公钥签名的生成和验证速度较慢,而密码哈希函数速度非常快。使用由迭代哈希函数实现的轻量级签名,可以指示元组已刷新。作者现在只需签署元组 $(v, H_m(R), [k_j, k_{j + 1}), c_j)$,其中 $H_m(R)$ 表示对随机数 $R$ 迭代哈希函数 $m$ 次的结果。作者可以通过发布 $H_m(R)$ 的连续原像,在连续快照中指示元组已刷新,这可以在 $O(1)$ 时间和 $O(log m)$ 空间内增量生成。客户端最多需要验证 $m$ 个哈希值,对于合理的 $m$ 值,这仍然比验证数字签名的成本低得多。

2.5 通过推测优化签名

将 PAD $P$ 分为两个世代:年轻世代 $G_0$ 包含最近修改的键,老世代 $G_1$ 包含所有其他键。老世代 $G_1$ 中的元组会被推测性地签署,其版本区间会延伸到未来,但只有在证明该键不在年轻世代中时才会被考虑。

2.5.1 操作流程
  • 世代管理 :每次对 $P$ 进行快照时,都需要对 $G_0$ 进行快照,这需要签署 $G_0$ 中每个新的或刷新的元组。为降低成本,将时间划分为多个时期,每 $E_1$ 次对 $P$ 进行快照时,将 $G_0$ 中的所有条目迁移到 $G_1$,对 $G_1$ 进行快照,并清空 $G_0$。这样可以确保 $G_0$ 最多包含 $E_1 + 1$ 个元组。
  • 插入和删除操作 :当请求向 $P$ 中插入一个键时,作者将代表该键和值的元组插入到 $G_0$ 中。当请求从 $P$ 中删除键 $k_j$ 时,$G_0$ 会更新以存储元组 $(g_0, [v’, v’], [k_j, k_{j + 1}), \perp)$,表示在版本 $v’$ 中,键 $k_j$ 不在 PAD 中。
  • 查找操作 :在查找键 $k_q$ 在快照 $v_q$ 中的情况时,服务器返回两个签名元组:$(g_0, v’, [k_j, k_{j + 1}), c_j)$ 和 $(g_1, [v^ , v^ + E_1 - 1], [k_j^ , k_{j + 1}^ ), c_j^*)$。根据键的匹配情况判断键是否存在于 $G_0$ 或 $G_1$ 中。
2.5.2 性能优化

推测可以将作者每次更新所需的签名数量从 $O(n)$ 减少到 $O(\sqrt{n})$。作者每次对 $P$ 进行快照时,需要签署 $E_1 + 1$ 个 $G_0$ 中的元组,并且每 $E_1$ 次快照需要签署 $G_1$ 中的所有 $n + 1$ 个元组。每次更新的平均签名数量为 $O(E_1 + \frac{n}{E_1})$,当 $E_1 = \sqrt{n}$ 时达到最小值。

2.6 多世代扩展

推测性 PADs 可以扩展到两个以上的世代。例如,在 3 世代的情况下,每 $E_1$ 次快照时,将键从 $G_0$ 迁移到 $G_1$,每 $E_2$ 次快照时,将键从 $G_1$ 迁移到 $G_2$。

综上所述,通过版本化节点和基于元组的设计,以及各种优化策略,可以实现超高效聚合历史无关的 PADs,在性能和存储成本之间取得良好的平衡。

不同缓存策略对比:
| 缓存策略 | 每次更新存储成本 | 生成成员证明时间 | 特点 |
| — | — | — | — |
| 全缓存策略 | $O(log n)$ | $O(log v + log n)$ | 认证器缓存始终命中,但失去 $O(1)$ 优势 |
| 中位数层缓存策略 | $O(1)$ | $O(\sqrt{n} log v)$ | 平衡存储和证明时间 |

推测性 PADs 操作流程 mermaid 图:

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A(开始):::process --> B(对 P 进行快照):::process
    B --> C{是否到 E1 次快照}:::process
    C -- 是 --> D(将 G0 迁移到 G1):::process
    D --> E(对 G1 进行快照):::process
    E --> F(清空 G0):::process
    F --> G(更新 G0 和 G1 元组):::process
    C -- 否 --> G
    G --> H(插入或删除操作):::process
    H --> I(查找操作):::process
    I --> J(返回签名元组):::process
    J --> K(结束):::process

基于元组的 PADs 存储优化操作步骤:
1. 合并元组:
- 分析快照间冗余性,确定可合并的元组。
- 存储合并元组 $([v, v + \Delta], [k_j, k_{j + 1}), c_j, SIGS)$。
2. 使用持久搜索树存储元组:
- 建立持久搜索树 $PST$ 与 PAD 快照的对应关系。
- 根据更新指示,更新 $PST$ 中的元组。

3. 技术对比与应用场景分析

3.1 不同 PADs 实现技术对比

技术类型 存储成本 生成成员证明时间 特点
基于版本化节点的 PADs(全缓存策略) $O(log n)$ $O(log v + log n)$ 认证器缓存易命中,但存储成本高,失去版本化节点 $O(1)$ 优势
基于版本化节点的 PADs(中位数层缓存策略) $O(1)$ $O(\sqrt{n} log v)$ 平衡存储与证明时间,适合历史快照查询
基于元组的 PADs(单独签名元组) $O(n)$ $O(1)$ 实现简单,但签名和存储成本高
基于元组的 PADs(元组替代) $O(1)$ $O(1)$ 降低存储成本,签名可跨多个版本
基于元组的 PADs(推测优化) $O(\sqrt{n})$ $O(1)$ 减少签名数量,提高性能

从表格中可以看出,不同的 PADs 实现技术在存储成本和生成成员证明时间上各有优劣。基于版本化节点的 PADs 更侧重于树结构的优化和缓存策略的设计,而基于元组的 PADs 则通过元组表示和各种优化方法来提高性能。

3.2 应用场景分析

  • 频繁更新且对存储敏感的场景 :中位数层缓存策略的版本化节点 PADs 或元组替代、推测优化的基于元组的 PADs 较为合适。例如,在实时数据更新系统中,数据频繁变化,需要控制存储成本,这些技术可以在保证一定查询性能的同时,减少存储开销。
  • 历史数据查询频繁的场景 :中位数层缓存策略的版本化节点 PADs 能在历史快照中以相对合理的时间生成成员证明,适合需要大量历史数据查询的应用,如审计系统、数据追溯系统等。
  • 对证明生成时间要求极高的场景 :基于元组的 PADs 由于能产生恒定大小的查询响应证明,更能满足这类场景的需求,如实时交易验证系统。

4. 总结与展望

4.1 技术总结

本文介绍了超高效聚合历史无关的 PADs 的两种主要实现方式:基于版本化节点和基于元组的设计。基于版本化节点的方法通过不同的缓存策略,在存储和查询性能之间进行权衡;基于元组的设计则利用元组表示字典,并通过合并元组、元组替代、迭代哈希函数和推测优化等技术,降低存储和签名成本,提高查询效率。

4.2 未来展望

  • 技术融合 :可以考虑将版本化节点和基于元组的技术进行融合,发挥两者的优势,进一步优化 PADs 的性能。例如,在版本化节点的基础上引入元组的表示方式,或者在元组设计中借鉴版本化节点的缓存策略。
  • 新的优化策略 :随着数据规模和查询需求的不断增长,需要探索更多新的优化策略。例如,结合机器学习算法,根据数据的使用模式和变化规律,动态调整缓存策略和签名方式。
  • 应用拓展 :将超高效聚合历史无关的 PADs 应用到更多领域,如区块链、云计算、物联网等。在这些领域中,数据的安全性、完整性和查询效率都至关重要,PADs 技术有望发挥重要作用。

版本化节点与基于元组的 PADs 技术对比 mermaid 图:

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A(版本化节点 PADs):::process --> B(全缓存策略):::process
    A --> C(中位数层缓存策略):::process
    D(基于元组的 PADs):::process --> E(单独签名元组):::process
    D --> F(元组替代):::process
    D --> G(推测优化):::process
    B --> H(存储成本高):::process
    B --> I(证明时间适中):::process
    C --> J(存储成本低):::process
    C --> K(证明时间适中):::process
    E --> L(存储成本高):::process
    E --> M(证明时间短):::process
    F --> N(存储成本低):::process
    F --> M
    G --> N
    G --> M

不同应用场景下的技术选择列表:
1. 频繁更新且对存储敏感的场景:
- 中位数层缓存策略的版本化节点 PADs
- 元组替代的基于元组的 PADs
- 推测优化的基于元组的 PADs
2. 历史数据查询频繁的场景:
- 中位数层缓存策略的版本化节点 PADs
3. 对证明生成时间要求极高的场景:
- 基于元组的 PADs

综上所述,超高效聚合历史无关的 PADs 技术为数据存储、查询和验证提供了多种有效的解决方案,未来有望在更多领域得到广泛应用和进一步发展。

【电能质量扰动】基于ML和DWT的电能质量扰动分类方法研究(Matlab实现)内容概要:本文研究了一种基于机器学习(ML)和离散小波变换(DWT)的电能质量扰动分类方法,并提供了Matlab实现方案。首先利用DWT对电能质量信号进行多尺度分解,提取信号的时频域特征,有效捕捉电压暂降、暂升、中断、谐波、闪变等常见扰动的关键信息;随后结合机器学习分类器(如SVM、BP神经网络等)对提取的特征进行训练与分类,实现对不同类型扰动的自动识别与准确区分。该方法充分发挥DWT在信号去噪与特征提取方面的优势,结合ML强大的模式识别能力,提升了分类精度与鲁棒性,具有较强的实用价值。; 适合人群:电气工程、自动、电力系统及其自动等相关专业的研究生、科研人员及从事电能质量监测与分析的工程技术人员;具备一定的信号处理基础和Matlab编程能力者更佳。; 使用场景及目标:①应用于智能电网中的电能质量在线监测系统,实现扰动类型的自动识别;②作为高校或科研机构在信号处理、模式识别、电力系统分析等课程的教学案例或科研实验平台;③目标是提高电能质量扰动分类的准确性与效率,为后续的电能治理与设备保护提供决策依据。; 阅读建议:建议读者结合Matlab代码深入理解DWT的实现过程与特征提取步骤,重点关注小波基选择、分解层数设定及特征向量构造对分类性能的影响,并尝试对比不同机器学习模型的分类效果,以全面掌握该方法的核心技术要点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值