42、生成增量Web表:算法与实现

生成增量Web表:算法与实现

在处理Web数据时,我们常常需要跟踪和表示Web表中的变化。本文将介绍如何根据两个不同时间点的Web表,生成对应的增量Web表,以捕捉数据的插入、删除和修改操作。

1. 增量Web表概述

增量Web表主要有三种类型:$\Delta^+$ - Web表、$\Delta^-$ - Web表和$\Delta^M$ - Web表。$\Delta^+$ - Web表记录了在特定时间段内插入到Web表中的新节点;$\Delta^-$ - Web表记录了被删除的节点;$\Delta^M$ - Web表则记录了内容发生修改的节点。

例如,在图中展示的$\Delta^+$ - Web表中,黑色框表示在2001年1月15日至2月15日期间插入到Drugs表中的新节点。每个Web元组展示了新节点与Web表中其他相关节点的关系。

2. 算法Delta的四个阶段

算法Delta用于生成上述三种增量Web表,它主要分为四个阶段:

2.1 阶段1和2:生成连接表和识别节点ID

此阶段的主要任务是生成连接表和识别节点ID的变化。具体步骤如下:
1. 获取Web表$W_1$和$W_2$中的所有节点ID,分别记为$N_1$和$N_2$。
2. 计算可连接节点的ID集合$J$。
3. 生成右外连接表$W_{ro}$、左外连接表$W_{lo}$和连接表$W_j$。
4. 确定从$W_1$中删除的节点ID集合$delNodeSet = N_1 - N_2$。
5. 确定添加到$W_1$中的节点ID集合$addNodeSet = N_2 - N_1$。
6. 确定内容发生修改的节点ID集合$updateNodeSet = (N_1 - J - delNodeSet) \cup (N_2 - J - addNodeSet)$。

以下是该阶段的伪代码:

Input: Web tables W1 = ⟨Z1, S1, T1⟩, W2 = ⟨Z2, S2, T2⟩.
Output: Delta web tables W∆+ = ⟨Z∆+, S∆+, T∆+⟩, W∆−= ⟨Z∆−, S∆−, T∆−⟩
and W∆M = ⟨Z∆M , S∆M , T∆M ⟩.
(1) N1 = GetAllNodeIds(W1); /* Phase 1 */
(2) N2 = GetAllNodeIds(W2);
(3) J = ComputeJoinableNodeIds(N1, N2); 
(4) W12 = GenerateResultTables(N1, N2, W1, W2, J)
    where W12 = {Wro, Wlo, Wj};
(5) delNodeSet = N1 - N2; /* Ids of the nodes deleted from W1 */
/* Phase 2 */
(6) addNodeSet = N2 - N1; /* Ids of the nodes added to W1 */
(7) updateNodeSet = (N1 - J - delNodeSet) ∪ (N2 - J - addNodeSet);
2.2 阶段3:识别增量Web元组

此阶段的目标是识别包含插入、删除和修改节点的Web元组。具体步骤如下:
1. 计算未被连接表捕获的更新节点集合$K$。
2. 复制添加和删除节点的ID集合到$A$和$D$。
3. 确定仅在连接表中出现的修改节点集合$U$。
4. 从右外连接表$W_{ro}$中识别包含新节点的元组集合$insertTupleSet$。
5. 从左外连接表$W_{lo}$中识别包含删除节点的元组集合$deleteTupleSet$。
6. 根据插入和删除节点的识别情况,从连接表$W_j$中识别包含修改节点的元组集合$updateTupleSet$。

以下是该阶段的部分伪代码:

(8) Nj = GetAllNodeIds(Wj); /* Phase 3 */
(9) Let K = updateNodeSet - (Nj - J);
(10) Let A = addNodeSet;
(11) Let D = delNodeSet;
(12) Let U = (Nj - J) ∩ updateNodeSet;
(13) insertTupleSet = DeltasFromRightOuter(A, K, Wro, temp1, temp2);
(14) deleteTupleSet = DeltasFromLeftOuter(D, K, Wlo, temp1, temp2);
(15) if (|A| = 0 and |D| = 0) {
    (16) updateTupleSet = DeltasFromJoin( Wj, U, N1, N2);
(17) else
    (18) updateTupleSet = DeltasFromJoin(A, D, U, Wj, insertTupleSet,
        deleteTupleSet);
(19) if (|temp1| != 0)
    (20) Insert into updateTupleSet web tuples from temp1;
(21) if (|temp2| != 0)
    (22) Insert into updateTupleSet web tuples from temp2;
2.3 阶段3算法详细解释
  • DeltasFromRightOuter(A, K, Wro, temp1, temp2)算法
    该算法用于从右外连接表$W_{ro}$中识别包含新节点的元组。具体步骤如下:
Input: Right outer-joined table Wro, set of added and updated
node ids A and U respectively, temporary sets temp1 and temp2 to store tuples.
Output: Set of web tuples insertTupleSet containing new nodes.
(1) for (b = 1 to |Wro|) { 
(2)     Get tuple wb;
(3)     tupleNodeIdSet[b] = GetTupleNodeIds(wb);
(4)     if (tupleNodeIdSet[b] ∩ A != ∅) {
(5)         Store wb in insertTupleSet;
(6)         Insert (tupleNodeIdSet[b] ∩ A) in tempAddSet;
(7)         if (K != ∅) {
(8)             if (tupleNodeIdSet[b] ∩ K != ∅)
(9)                 Insert wb in temp2;
(10)        }
(11)    }
(12)    else
(13)        Store wb in temp1; 
(14) }
(15) A = A - tempAddSet; 
(16) return temp1, temp2, insertTupleSet, A, K;
  • DeltasFromLeftOuter(D, K, Wlo, temp1, temp2)算法
    该算法与DeltasFromRightOuter类似,用于从左外连接表$W_{lo}$中识别包含删除节点的元组,伪代码省略。

  • DeltasFromJoin(Wj, U, N1, N2)算法
    当所有插入和删除节点都被识别后,该算法用于从连接表$W_j$中识别包含修改节点的元组。具体步骤如下:

Input:Joined table Wj, set of updated node ids U, N1 and N2.
Output: Modified updateTupleSet.
(1) for (a = 1 to |Wj|) {
(2)     Get tuple wa;
(3)     tupleNodeIdSet[a] = GetTupleNodeIds(wa);
(4)     Let X = tupleNodeIdSet[a] ∩ U;
(5)     Retrieve node set N1(wa) such that N1(wa) ⊆ X and N1(wa) ⊂ N1;
(6)     Retrieve node set N2(wa) such that N2(wa) ⊆ X and N2(wa) ⊂ N2;
(7)     if (X - (N1(wa) ∩ N2(wa)) = ∅) {
(8)         Store wa in updateTupleSet;
(9)     }
(10)    else
(11)        wa is ignored;
(12) }
(13) Return updateTupleSet;
  • DeltasFromJoin(A, D, U, Wj, insertTupleSet, deleteTupleSet)算法
    当还有插入或删除节点未被识别时,该算法用于从连接表$W_j$中识别包含修改、插入和删除节点的元组。具体步骤如下:
Input:Joined table Wj, set of added, deleted and updated node ids A, D and U
respectively, deleteTupleSet, insertTupleSet.
Output: Modified deletedTupleSet, insertTupleSet, updateTupleSet.
(1) for (a = 1 to |Wj|) {
(2)     Get tuple wa;
(3)     tupleNodeIdSet[a] = GetTupleNodeIds(wa);
(4)     Let Y = tupleNodeIdSet[a] - (tupleNodeIdSet[a] ∩ J);
(5)     if ((Y != ∅) or (Y ∩ A != ∅) or (Y ∩ D != ∅)){
(6)         Retrieve node set N1(wa) such that N1(wa) ⊆ Y and N1(wa) ⊂ N1;
(7)         Retrieve node set N2(wa) such that N2(wa) ⊆ Y and N2(wa) ⊂ N2;
(8)         if (Y - (N1(wa) ∩ N2(wa)) = ∅) {
(9)             Store wa in updateTupleSet;
(10)        }
(11)        else {
(12)            if ((Y - (N1(wa) ∩ N2(wa))) ⊂ A ∪ D) {
(13)                Extract w2 ∈ W2 from wa;
(14)                Extract w1 ∈ W1 from wa;
(15)                Insert wa in updateTupleSet;
(16)                Insert w1 or w2 to deleteTupleSet or insertTupleSet;
(17)            }
(18)            else {
(19)                if (A ∩ [Y - (N1(wa) ∩ N2(wa))] != ∅)
(20)                    Insert w2 in insertTupleSet;
(21)                if (D ∩ [Y - (N1(wa) ∩ N2(wa))] != ∅)
(22)                    Insert w1 in deleteTupleSet;
(23)            }
(24)            A = A - (A ∩ [Y - (N1(wa) ∩ N2(wa))]);
(25)            D = D - (D ∩ [D - (N1(wa) ∩ N2(wa))]);
(26)        }
(27)    }
(28)    else
(29)        wa is ignored;
(30) }
(31) Return insertTupleSet, deleteTupleSet, updateTupleSet;
2.4 阶段4:创建增量Web表

此阶段根据前面识别的元组集合创建三种增量Web表:
1. 创建$\Delta^M$ - Web表$W_{\Delta^M}$,通过将$updateTupleSet$中的元组实例化到$W_{\Delta^M}$的Web元组池中,并从$W_1$和$W_2$中检索修改节点的旧版本和新版本实例化到$W_{\Delta^M}$的表节点池中。
2. 创建$\Delta^+$ - Web表$W_{\Delta^+}$,通过将$insertTupleSet$中的元组实例化到$W_{\Delta^+}$中。
3. 创建$\Delta^-$ - Web表$W_{\Delta^-}$,通过将$deleteTupleSet$中的元组实例化到$W_{\Delta^-}$中。

以下是该阶段的伪代码:

(23) W∆M = CreateDeltaM(updateTupleSet, W1, W2, S12, updateNodeSet);
(24) W∆+ = CreateDeltaPlus(insertTupleSet, W1, W2, addNodeSet);
(25) W∆− = CreateDeltaMinus(deleteTupleSet, W1, W2, delNodeSet);
(26) return W∆+, W∆− and W∆M;
3. 总结

通过算法Delta的四个阶段,我们可以有效地生成$\Delta^+$ - Web表、$\Delta^-$ - Web表和$\Delta^M$ - Web表,从而跟踪和表示Web表中的数据变化。这些增量Web表对于数据同步、版本控制和数据审计等应用场景非常有用。

整个算法的流程可以用以下mermaid流程图表示:

graph TD;
    A[阶段1和2: 生成连接表和识别节点ID] --> B[阶段3: 识别增量Web元组];
    B --> C[阶段4: 创建增量Web表];
    B1[DeltasFromRightOuter] --> B;
    B2[DeltasFromLeftOuter] --> B;
    B3[DeltasFromJoin] --> B;

表格总结算法Delta的四个阶段:
| 阶段 | 主要任务 |
| ---- | ---- |
| 阶段1和2 | 生成连接表,识别添加、删除和修改的节点ID |
| 阶段3 | 从连接表和外连接表中识别包含插入、删除和修改节点的元组 |
| 阶段4 | 根据识别的元组集合创建增量Web表 |

通过以上步骤和算法,我们可以准确地捕捉Web表中的数据变化,为后续的数据处理和分析提供有力支持。

生成增量Web表:算法与实现(续)

4. 算法Delta各阶段详细分析
4.1 阶段1和2的重要性

阶段1和2是算法的基础,为后续的处理提供了必要的信息。通过获取两个Web表的所有节点ID,并计算可连接节点的ID集合,我们能够清晰地了解两个Web表之间的关系。确定添加、删除和修改的节点ID集合,为后续识别包含这些节点的Web元组奠定了基础。例如,在实际应用中,如果我们需要对比不同时间点的药品信息表,通过这两个阶段,我们可以快速找出新增的药品、删除的药品以及信息发生修改的药品。

4.2 阶段3中各算法的协同作用

阶段3中的四个算法相互配合,共同完成了增量Web元组的识别任务。
- DeltasFromRightOuter算法 :主要从右外连接表中识别包含新节点的元组。在处理过程中,它会将包含新节点的元组存储到 insertTupleSet 中,并将相关信息存储到临时集合中,以便后续处理。
- DeltasFromLeftOuter算法 :与 DeltasFromRightOuter 类似,从左外连接表中识别包含删除节点的元组,确保所有删除的节点都能被正确识别。
- DeltasFromJoin算法(无插入和删除节点情况) :当所有插入和删除节点都被识别后,该算法从连接表中识别包含修改节点的元组。它会检查每个元组是否同时包含修改节点的旧版本和新版本,只有满足条件的元组才会被存储到 updateTupleSet 中。
- DeltasFromJoin算法(有插入或删除节点情况) :当还有插入或删除节点未被识别时,该算法不仅会从连接表中识别包含修改节点的元组,还会处理包含插入和删除节点的情况。它会根据节点的情况,将元组插入到相应的集合中,并更新相关的节点ID集合。

这些算法的协同作用,确保了所有插入、删除和修改的节点都能被准确识别,并存储到相应的元组集合中。

4.3 阶段4的实际意义

阶段4根据前面识别的元组集合创建三种增量Web表。这些增量Web表具有重要的实际意义:
- $\Delta^M$ - Web表 :记录了内容发生修改的节点,通过将旧版本和新版本的节点信息存储在一起,我们可以清晰地看到节点的变化情况。这对于数据审计和版本控制非常有用,例如在药品信息表中,我们可以查看哪些药品的信息发生了修改,以及修改前后的具体内容。
- $\Delta^+$ - Web表 :记录了新增的节点,方便我们了解在特定时间段内新添加的数据。在药品信息表中,我们可以快速找出新上市的药品。
- $\Delta^-$ - Web表 :记录了删除的节点,帮助我们跟踪数据的删除情况。例如,在药品信息表中,我们可以知道哪些药品已经下架。

5. 实际应用案例

假设我们有一个药品信息的Web表,在不同时间点进行了两次查询,得到了两个Web表$W_1$和$W_2$。我们可以使用算法Delta来生成增量Web表,具体步骤如下:
1. 阶段1和2
- 获取$W_1$和$W_2$的所有节点ID。
- 计算可连接节点的ID集合。
- 生成右外连接表、左外连接表和连接表。
- 确定添加、删除和修改的节点ID集合。
2. 阶段3
- 计算未被连接表捕获的更新节点集合。
- 复制添加和删除节点的ID集合。
- 确定仅在连接表中出现的修改节点集合。
- 从右外连接表中识别包含新节点的元组集合。
- 从左外连接表中识别包含删除节点的元组集合。
- 根据插入和删除节点的识别情况,从连接表中识别包含修改节点的元组集合。
3. 阶段4
- 创建$\Delta^M$ - Web表,将修改节点的信息存储在一起。
- 创建$\Delta^+$ - Web表,记录新增的节点。
- 创建$\Delta^-$ - Web表,记录删除的节点。

通过以上步骤,我们可以清晰地看到药品信息表在两个时间点之间的变化情况,包括新增的药品、删除的药品以及信息发生修改的药品。

6. 总结与展望

算法Delta通过四个阶段的处理,有效地生成了$\Delta^+$ - Web表、$\Delta^-$ - Web表和$\Delta^M$ - Web表,为跟踪和表示Web表中的数据变化提供了一种有效的方法。这些增量Web表在数据同步、版本控制和数据审计等领域具有广泛的应用前景。

在未来的研究中,我们可以进一步优化算法的性能,提高识别增量Web元组的效率。例如,可以采用并行计算的方法,同时处理多个外连接表和连接表,减少算法的执行时间。此外,我们还可以将算法应用到更多的领域,如社交网络数据、金融数据等,为这些领域的数据处理和分析提供支持。

整个算法Delta的处理流程可以用以下mermaid流程图更详细地表示:

graph TD;
    A[阶段1和2: 生成连接表和识别节点ID] --> B[阶段3: 识别增量Web元组];
    B --> C[阶段4: 创建增量Web表];
    B1[DeltasFromRightOuter] --> B;
    B2[DeltasFromLeftOuter] --> B;
    B3[DeltasFromJoin(无插入和删除节点)] --> B;
    B4[DeltasFromJoin(有插入或删除节点)] --> B;
    A1[获取节点ID] --> A;
    A2[计算可连接节点ID] --> A;
    A3[生成连接表] --> A;
    A4[确定添加、删除和修改节点ID] --> A;
    C1[创建$\Delta^M$ - Web表] --> C;
    C2[创建$\Delta^+$ - Web表] --> C;
    C3[创建$\Delta^-$ - Web表] --> C;

表格再次总结算法Delta各阶段的关键信息:
| 阶段 | 主要任务 | 关键算法 |
| ---- | ---- | ---- |
| 阶段1和2 | 生成连接表,识别添加、删除和修改的节点ID | GetAllNodeIds、ComputeJoinableNodeIds、GenerateResultTables |
| 阶段3 | 从连接表和外连接表中识别包含插入、删除和修改节点的元组 | DeltasFromRightOuter、DeltasFromLeftOuter、DeltasFromJoin |
| 阶段4 | 根据识别的元组集合创建增量Web表 | CreateDeltaM、CreateDeltaPlus、CreateDeltaMinus |

通过以上的分析和总结,我们可以更好地理解算法Delta的工作原理和实际应用价值,为在实际项目中应用该算法提供了有力的支持。

源码地址: https://pan.quark.cn/s/d1f41682e390 miyoubiAuto 米游社每日米游币自动化Python脚本(务必使用Python3) 8更新:更换cookie的获取地址 注意:禁止在B站、贴吧、或各大论坛大肆传播! 作者已退游,项目不维护了。 如果有能力的可以pr修复。 小引一波 推荐关注几个非常可爱有趣的女孩! 欢迎B站搜索: @嘉然今天吃什么 @向晚大魔王 @乃琳Queen @贝拉kira 第三方库 食用方法 下载源码 在Global.py中设置米游社Cookie 运行myb.py 本地第一次运行时会自动生产一个文件储存cookie,请勿删除 当前仅支持单个账号! 获取Cookie方法 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 按刷新页面,按下图复制 Cookie: How to get mys cookie 当触发时,可尝试按关闭,然后再次刷新页面,最后复制 Cookie。 也可以使用另一种方法: 复制代码 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 控制台粘贴代码并运行,获得类似的输出信息 部分即为所需复制的 Cookie,点击确定复制 部署方法--腾讯云函数版(推荐! ) 下载项目源码和压缩包 进入项目文件夹打开命令行执行以下命令 xxxxxxx为通过上面方式或取得米游社cookie 一定要用双引号包裹!! 例如: png 复制返回内容(包括括号) 例如: QQ截图20210505031552.png 登录腾讯云函数官网 选择函数服务-新建-自定义创建 函数名称随意-地区随意-运行环境Python3....
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值