前置知识:
minhash, LSH(locality-sensitive hashing,局部敏感hash)
可自行百度
一、问题提出
数据存储在不同的数据库系统中,导致查询效率很低,降低了研究人员的工作效率
因此,本文提出了一种捕获EKG(enterprise knowledge graph)中数据库的关系,从而使用户更好查询数据。
本文的主要贡献为:AURUM,一个能够建立、维护和查询EKG的方法。
其中,在建立EKG的过程中,提出了一种只用遍历一遍数据库的方法;在维护过程中,提出了RESS方法,只需要使用数据集中的一小部分即可判断数据库中需要更新的部分。
二、构建(build)
本文中将这一过程分为了两步
1. sketching technique
2. locality-sensitive hashing
1. signature-building阶段
由profiler模块进行:将数据转换为profiles,其中包含了足够用于计算相似度的语义信息
其中包含了一系列处理子模块,在伪代码中用compute_profile()表示
其中两个特殊的子模块为:source/sink 子模块
为了加快处理速度,在三个层次上引入了并行机制
任务粒度
2. relationship-building阶段
由graph builder模块进行:时间复杂度为O(n)
在这一部分中使用上一阶段处理得到的profiles文件
使用Jaccard 相似度和cosine相似度
在这一部分中计算出的相似度都是具体数值,方便后续根据阈值进行处理
此外,还需评估两列是否是主键-外键关系:利用每列中数据是否互不相同进行判断
本部分伪代码如下:
算法输入:数据库中所有列的集合C、用于存储列标签的store、相似度阈值
算法输出:H = (V,E),其中V为EKG中的节点,E是连接节点的语义关系集
算法步骤:
1. 对于数据库中的每一列c:
1) 计算c中的相关属性,存入profile
2) 将profile存入store
3)像H中添加结点
2. 对于store中储存的每一个profile:
1) 对p.name 和 p 构建索引
2) 对p.signature 和 p 构建索引
索引中同样包含阈值
3. 对于store中储存的每一个profile
1) 利用LSH算法得到与p属性值相似的候选者,并建立边
2) 利用LSH算法得到与p内容值相似的候选者,并建立边
3) 在与p内容值相似的候选者中,进一步判断出是否有主键/外键关联
三、维护
由于所连接的各个数据库中都会存在增删改查等行为,故而需要对EKG进行维护
增量维护
当某一列数据的变化过大时,需要重新计算这一列的标签
作者在此处提出了RESS方法
在这个方法中,只需根据这一列数据c的子集s便可判断这列的标签是否需要更新
本部分伪代码如下:
算法输入:数据库中所有列的集合、存储各个列标签的store库、衡量某一列变化程度的阈值γ
算法输出:需要更新标签的列的集合
算法过程:
对于数据库中的每一列c:
1. 从c中任选子集s
将c中互不相同的数据个数记为x
JS_max记为|s|/x
2. 对子集s求minhash,记为s_mh
从store中读取c的content_signature, 记为x_mh
JS' = s_mh和x_mh的Jaccard相似度
3. 根据1-JS'/JS_max的值判断是否需要更新列c