«上一篇 下一篇»
  计算机工程  2021, Vol. 47 Issue (2): 254-260  DOI: 10.19678/j.issn.1000-3428.0058851
0

引用本文  

王智铎, 江波, 苗瑞, 等. 基于有向图的外键冲突解决算法设计与实现[J]. 计算机工程, 2021, 47(2), 254-260. DOI: 10.19678/j.issn.1000-3428.0058851.
WANG Zhiduo, JIANG Bo, MIAO Rui, et al. Design and Implementation of Solution Algorithm for Foreign Key Conflict Based on Directed Graph[J]. Computer Engineering, 2021, 47(2), 254-260. DOI: 10.19678/j.issn.1000-3428.0058851.

基金项目

国家自然科学基金(71971139);上海市2019年度科技创新行动计划"一带一路"国际合作项目(19510750200)

作者简介

王智铎(1994-), 男, 硕士研究生, 主研方向为Java开发、数据库技术;
江波, 研究员、博士后、博士生导师;
苗瑞, 副教授、博士、博士生导师;
赵慧, 硕士研究生

文章历史

收稿日期:2020-07-06
修回日期:2020-10-10
基于有向图的外键冲突解决算法设计与实现
王智铎1 , 江波1 , 苗瑞2 , 赵慧1     
1. 中国电子科技集团公司第三十二研究所, 上海 201808;
2. 上海交通大学 船舶海洋与建筑工程学院, 上海 200240
摘要:外键作为关系型数据库中的重要约束之一,对约束数据库的操作顺序有着重要意义,但在数据库集群同步情况下用户无法得知操作顺序,会造成外键冲突,为解决该问题,提出一种基于有向图的外键冲突解决算法。将外键关联转化为有向无环图模型,基于SQL语句实现生成有向图的邻接矩阵数据,通过拓扑排序遍历有向无环图,得到满足数据表写入操作的原子性序列。实验结果表明,与传统暴力枚举算法相比,该算法解决外键冲突的执行时间更短,数据库访问频率更低,且CPU占用率和内存消耗性能指标均体现出明显优势。
关键词外键    邻接矩阵    有向图    数据库    拓扑排序    
Design and Implementation of Solution Algorithm for Foreign Key Conflict Based on Directed Graph
WANG Zhiduo1 , JIANG Bo1 , MIAO Rui2 , ZHAO Hui1     
1. The 32 nd Research Institute of China Electronics Technology Group Corporation, Shanghai 201808, China;
2. School of Naval Architecture, Ocean & Civil Engineering, Shanghai Jiao Tong University, Shanghai 200240, China
Abstract: As one of the important constraints in relational databases, foreign keys play an important role in constraining the order of operations of the database.However, in some cases, users cannot know the order of operations, causing foreign key conflicts.To solve the problem, this paper proposes a solution algorithm for foreign key conflicts based on directed graphs.The foreign key association is converted into a directed acyclic graph model, and the adjacency matrix data of the directed graph is generated based on SQL statements.Then the directed acyclic graph is traversed through topological sorting to generate an atomic sequence that satisfies the data table write operation. Experimental results show that compared with the traditional violence enumeration algorithm, the proposed algorithm reduces the execution time for solving foreign key conflicts, decreases the database access frequency, and significantly improves the performance indicators of CPU usage and memory consumption.
Key words: foreign key    adjacency matrix    directed graph    database    topological sorting    
0 概述

数据库作为存储数据的介质,其包含数量庞大的数据表和复杂的数据关联。为确保数据库中数据的一致性,需要在数据表间定义一些约束关系,并引入外键(foreign key)概念,用于建立和加强两个表数据之间的链接关系,即通过将表中某一字段或多个字段映射到另一个表中,创建两个表之间的约束关联。目前,采用外键设计的数据库已在传统行业中广泛使用,其优点主要是从数据库底层实现了数据的完整性和一致性,软件底层数据库开发与软件应用层开发相对透明,上层应用开发人员无需完全了解数据库设计规约。随着大数据时代的到来,互联网的数据容量呈现指数级增长,传统行业的应用软件逐渐转向互联网应用模式。由于外键字段执行写入操作时,需实现外键约束逻辑,对涉及外键校验的数据表加同步锁。如果写入操作不按照某种顺序执行,则造成外键校验不通过。因此,互联网行业应用不推荐使用外键。例如,数据表A关联数据表B,在用户执行写入操作时,新增表A数据的操作应在新增表B数据的操作之后,删除表A数据的操作应在删除表B的操作之前。

为满足大数据时代用户新需求,需要将通过客户端访问的模式转向通过浏览器访问的模式。数据表的数据量逐渐扩增且存在极为复杂的多表多字段外键依赖关系。在搭建数据库集群实现数据同步过程中,极易出现因外键冲突导致同步业务困难问题。如果重新设计底层数据库结构,消除已有外键依赖的数据表必然大幅增加开发成本。传统的解决方法是通过递归暴力查找外键冲突,此方法需反复访问数据库来查找外键依赖,造成IO操作频繁,影响了整体业务的性能。

外键识别是解决外键冲突的开始,通过外键字段的数据类型是否为所述外键关系中标识可定义外键关系[1-3]。文献[4]提出一种自动检测外键约束关系的算法,将外键定义为唯一列的组合和包含依赖项集合的子集。然而,此方法只适用于数据表的单列的外键检测,并不适用于存在多列的外键关联的业务场景。文献[5]提出一种识别多列外键的算法,通过评估外键的相关性、列名以及数据的最大值最小值来查找外键关系。

随着人工智能技术的兴起,研究人员使用机器学习算法检测传统数据库的外键关系[6-8]。文献[9]介绍一种采用机器学习检测关系型数据库外键依赖的方法,包括数据表字段名的相似度和字段数据的平均长度等,被数据库厂商广泛应用于数据库外键关系检测。同时,多列外键依赖关系机器学习检测算法受到人们重视。文献[10]提出一种机器学习算法确定关系型数据库的数据表中主键与外键关系的方法,但该方法仅适用于外键与主键的关系检测,并未考虑外键冲突的情况,以及解决外键冲突的方法。文献[11]提出一种基于外键冲突消除的外键检测算法,该方法定义了外键依赖关系的图结构模型,以图的层级顺序消除外键冲突,但该方法只适用于网络表格,其外键关系的定义与传统的关系型数据库相比存在明显区别。然而,现有的外键冲突解决算法仅提出了理论依据,或仅能解决某些应用场景的实现,而未提出一种通用的算法,来满足传统应用软件兼容互联网应用模式且不改变数据库表结构设计等需求。

此外,研究人员对于异构数据库的数据迁移[12]与数据同步[13-14]问题也展开了广泛的研究。由于其数据迁移过程涉及大批量读写操作,外键冲突问题会造成写入数据操作困难,因此解决数据库外键冲突是实现异构数据库同步的重要技术之一。文献[15]介绍了一种异构数据库的同步解决方案,提出存在外键关联表的模式转换同步方案,但该方案仅考虑到外键依赖主键字段。文献[16]提出一种异构数据库多种数据同步技术方案,但该方案中提到的触发器同步、快照同步、时间戳同步均需要变更数据表结构。文献[17]介绍一种利用有向图模型解决分布式控制系统中局部信息一致性问题的方法,该方法将多智能体系统数据建模为有向图模型,从而得出完全分布式的一致性算法。此外,一些关于外键依赖的异常检测方法也可以应用于解决外键冲突问题[18-20]

本文提出一种外键关联有向图模型算法,将数据表之间的外键关系以有向图的形式展现,方便分析造成外键冲突的原因。根据数据库提供的SQL语句实现有向图生成算法,并将有向图转化为邻接矩阵,为解决外键冲突提供元数据。在此基础上,提出以邻接矩阵作为输入数据、以拓扑排序算法作为数据处理方法的原子性序列生成算法,解决外键冲突问题。

1 数据表与外键的有向无环图表征法 1.1 有向无环图模型生成

外键关系检测是解决外键冲突的必要条件,因此在介绍外键冲突解决算法前,本节首先将数据表之间的外键依赖关系通过有向图直观展现。表 1所示为本文中的符号描述。

下载CSV 表 1 符号描述 Table 1 Symbol description

假定ta为要解决外键冲突的表,ta依赖于tbtctdte图 1给出了该外键依赖关系的有向无环图示例,在后续的论述中,均以此为例。

Download:
图 1 外键有向图模型 Fig. 1 Directed graph model of foreign key

数据表外键依赖关系转化为有向无环图方法的步骤如下:

步骤 1  获取数据库的数据表集合T={tatbtctdte},令T=V

步骤 2  获取ti.fk与tj.rfk,得到Reference(ti.fk,tj.rfk)。

步骤 3  令ei = Reference(ti.fk,tj.rfk),即一条从ti指向tj的有向边,构建GVE)。

步骤 4  由数据库的外键约定可知,外键不存在循环依赖,即不存在环,G=DAG。

1.2 邻接矩阵生成算法

根据1.1节给出的将数据表之间的外键关联转换为有向图模型方法,DAG可以直观地展现外键依赖关系,但是DAG不能直接作为应用程序的输入数据交给计算机处理。因此,通常会将DAG转化为邻接矩阵,以方便数据存储和外键冲突解决处理。本节的主要研究工作集中在如何通过程序执行SQL语句获取T和Reference数据,以及设计并实现将外键依赖关系转化为邻接矩阵的方法。以oracle数据库为例,将DAG转化为邻接矩阵的SQL代码如下:

输入  待执行写入操作的数据表ta

输出  邻接矩阵表

1.      begin

2.    select distinct parent,child

3.      from user_constraints//step 1

4.    inner join user_constraints//step 2

5.    on r_constraint_name=constraint_name

6.      where(constraint_type = 'fk'

7.      or constraint_type = 'rfk')//step 3

8.    connect by parent = prior child//step 4

9.    start with parent = 'ta'//step 5

10.      end

本文的研究重点在于如何通过SQL语句生成邻接矩阵,该SQL语句的详细功能如下:

1)从user_constraints查询parent和child数据,user_constraints是主键、外键等约束记录。查询结果如表 2所示。

下载CSV 表 2 笛卡尔积映射表 Table 2 Cartesian product mapping table

2)对user_constraints做笛卡尔积自链接inner join生成以数据库所有表作为节点集合T的无向图,如图 2所示,图中任意两节点间均一步可达,tn代表不存在外键的冗余节点。

Download:
图 2 节点集合T的无向图 Fig. 2 Undirected graph of node set T

3)以constraint_name列等于r_constraint_name列作为自连接映射关联的过滤条件,筛选满足该条件的边;使用where关键字作为过滤条件,过滤掉不包含fk、rfk的数据表,即移除图 2中无关的节点和边,过滤后的结果如图 3所示。

Download:
图 3 过滤后的结果 Fig. 3 Filtered result

4)确定存在外键依赖的表,将无向图转为有向图。其中,connect by表示将每一行的数据按链式的层次关系检索,prior关键字表示指针的指向,放置在连接关系两列中的某一列,prior所在的一侧表示入度,另一侧表示出度。

5)用start with关键字来标识查找图型结构的起始节点,需要执行写入操作的起始节点,即程序的输入。

经过上述流程,图 2所示的无向图最终转化为图 1所示的有向图。完整的SQL语句的执行结果如表 3所示,其中parent和child集合为T。以T={tatbtctdte}为行和列建立邻接矩阵表。首先将邻接矩阵表的数据均初始化为0,然后在表 3查找Reference,如果存在Reference={titj},则将邻接矩阵的第i行、第j列的元素更新为1。图 1的邻接矩阵如表 4所示。

下载CSV 表 3 约束记录 Table 3 Reference record
下载CSV 表 4 邻接矩阵 Table 4 Adjacency matrix
2 外键冲突解决算法

根据外键有向图模型,分析写入操作的执行顺序可得出以下结论:执行插入操作需满足插入节点的出度为0;执行删除操作需满足删除节点的入度为0;更新操作可视为插入新数据,且删除旧数据。更新前的数据为删除的旧数据,更新后的数据为插入新数据。

数据之间的外键约束关系可模型化为递归遍历的层次关系。在递归遍历的执行过程中,还需要判断当前访问节点的入度和出度。为实现上述功能,本文提出一种基于拓扑排序[21-22]的邻接矩阵遍历算法,具体步骤如下:

步骤 1  指定用户需要执行写入操作数据表为起始节点。

步骤 2  从当前节点开始,访问该节点,并标记该节点为已访问过的节点,防止递归回溯出现重复访问。

步骤 3  判断该节点是否存在未被访问的子节点,若无,则执行步骤4,若有,则判断未被访问的节点入度是否为0。若入度为0,则访问该子节点,跳转到步骤2,否则执行步骤5。

步骤 4  如果该节点为根节点,则访问完毕,否则执行步骤3。

步骤 5  标记该节点的入度为1,跳转到步骤3。

综上所述,扫描整个图的过程就是有向无环图(DAG)的拓扑排序过程[23],其满足每个节点出现且仅出现一次。若存在一条从节点A到节点B的路径,那么在序列中顶点A出现在顶点B之前。如果用户执行插入操作,则需要满足入度为0,插入操作的顺序即为拓扑排序的正序;如果执行删除操作,则需要满足出度为0,删除操作的顺序即为拓扑排序的倒序。

图 1为例,如果对ta执行插入操作,首先判断该有向图中出度为0的点,扫描到td的出度为0,则先将td存入输出结果队列,从图中移除td节点。然后重复该操作,递归移除出度为0的节点,直到遍历完图中的全部节点为止。如果对ta执行删除操作,只需要扫描入度为0的节点,其余步骤一致,或逆序遍历执行插入操作的输出结果均可。执行插入操作的输出结果集合INSERT={tdtctetbta},执行删除操作的输出结果集合DELETE={tatbtctdte}。

3 实验结果与分析 3.1 实验环境

实验硬件环境采用Intel CoreTM i5-9400 CPU @2.9 GHz、16 GB DDR5内存和2 TB机械硬盘;软件环境采用Microsoft Windows 10操作系统oracle数据库、Java Development kit 8开发工具包、NaviCat数据库可视化工具、jprofiler性能测试工具和IntelliJ IDEA开发工具等。

3.2 评估指标

实验将CPU利用率和内存消耗作为性能评估依据。CPU利用率是反映系统忙闲程度的指标。CPU利用率稳步上升,且数值不会过高,表明程序运行状态良好。当CPU利用率在某一时刻开始下降时,表明IO线程开始执行访问数据库,占用了CPU线程的工作;内存消耗是反映系统资源占用情况的指标。内存占用越高,表明程序运行过程中资源占用越多。当内存在某一时刻开始减少,表明jvm的垃圾回收线程开始工作,清理程序运行中不需要使用的资源。垃圾回收线程工作需要暂停CPU线程的正常运行。若CPU利用率和内存消耗出现频繁的抖动现象,则表明CPU线程处于阻塞状态,应用程序会出现明显的卡顿,影响用户体验。

3.3 结果对比与分析

为验证算法的准确性与泛化性,本文实验在不同的数据库应用场景下,对本文算法和传统算法进行性能比较。实验1为某学校的OA系统,实验采集了该管理系统的20张表,表中的数据主要为文本格式,有5张存在外键冲突的数据集;实验2为某公司的业务数据管理系统集群,实验采集了该数据库的20张表,表中的数据主要为文本和图片格式,有100张存在外键冲突的数据集;实验3为某公司的分布式多媒体文件存储系统,实验采集了该数据库的500张表,表中的数据主要为音频和视频格式,有200张存在外键冲突的数据集。

图 4可以看出:本文外键冲突解决算法的运行时间约为1 s,CPU占用率在运行期间内逐渐增长,最高值不超过40%,内存占用不超过50 MB,运行期间无垃圾回收,该结果说明应用程序访问数据库的开销可忽略不计;传统暴力枚举算法的运行时间约为9 s,CPU占用率的峰值接近50%,内存占用约为70 MB,运行期间触发一次轻量级垃圾回收,该结果说明暴力枚举算法访问数据库的I/O操作影响了CPU线程的正常工作,出现平缓的抖动。

Download:
图 4 OA系统数据集 Fig. 4 OA system dataset

图 5可以看出:本文外键冲突解决算法的运行时间约为2 s,CPU占用率在运行期间逐渐增长后趋于平稳,最高值不超过40%,内存占用不超过50 MB,程序运行期间无垃圾回收,该结果说明访问数据库的I/O操作略影响CPU工作线程;传统暴力枚举算法的运行时间约为20 s,CPU占用率出现频繁的波动,最高值超过50%,内存占用约为125 MB,运行期间多次触发垃圾回收。该结果说明暴力枚举算法的CPU工作线程被多次阻塞,出现较为频繁的抖动,应用程序出现卡顿。

Download:
图 5 数据管理系统数据集 Fig. 5 Database management system dataset

图 6可以看出:本文外键冲突解决算法的运行时间约为8 s,CPU占用率在运行期间出现略微抖动,最高值不超过40%,内存占用不超过100 MB,程序运行期间触发一次垃圾回收,该结果说明外键冲突解决算法访问数据库的I/O操作略微阻塞了CPU工作线程;传统暴力枚举算法的运行时间约40 s,CPU占用率在运行期间出现极为频繁的抖动,最高值超过50%,内存占用超过150 MB,运行期间多次触发垃圾回收,该结果说明暴力枚举算法的CPU线程频繁处于阻塞状态,应用程序出现明显的卡顿,影响用户体验。

Download:
图 6 分布式多媒体数据库数据集 Fig. 6 Distribute multimedia database dataset

综上所述,本文提出的基于有向图的外键冲突解决算法在运行时间、CPU占用率和内存消耗上均明显优于暴力枚举算法。

4 结束语

本文提出一种解决外键约束的有向图模型生成算法,其中有向图模型以某一数据表为起点,通过拓扑排序遍历与该表有外键关联的数据表,从而得出用户数据表写入操作执行的顺序,保证存在外键关联数据表的写入操作的原子性。实验结果证明了基于有向图的外键冲突解决算法比暴力枚举算法在性能上有着明显优势。下一步将对数据库集群化分布式数据同步模块的外键冲突解决方案进行研究,以优化时间复杂度,提升算法的鲁棒性。

参考文献
[1]
PACKIRISAMY G.Consistency check for foreign key definition: U.S.patent application 15/872, 381[P].2019-07-18.
[2]
MOTL J, KORDIK P.Foreign key constraint identification in relational databases[C]//Proceedings of IEEE ITAT'17.Washington D.C., USA: IEEE Press, 2017: 106-111.
[3]
TRIVEDI K K, KARKHANSI S S, BHARADWAJ A P.Primary and foreign key relationship identification with metadata analysis: U.S.patent 9, 721, 009[P].2017-08-01.
[4]
JIANG L, NAUMANN F. Holistic primary key and foreign key detection[J]. Journal of Intelligent Information Systems, 2020, 54: 439-461. DOI:10.1007/s10844-019-00562-z
[5]
ZHANG M, HADJIELEFTHERIOU M, OOI B C, et al. On multi-column foreign key discovery[J]. Proceedings of the VLDB Endowment, 2010, 3(1/2): 805-814. DOI:10.14778/1920841.1920944
[6]
SHAH V, KUMAR A, ZHU X. Are key-foreign key joins safe to avoid when learning high-capacity classifiers?[J]. Proceedings of the VLDB Endowment, 2017, 11(3): 366-379. DOI:10.14778/3157794.3157804
[7]
TSCHIRSCHNITZ F, PAPENBROCK T, NAUMANN F. Detecting inclusion dependencies on very many tables[J]. ACM Transactions on Database Systems, 2017, 42(3): 1-29. DOI:10.1145/3105959
[8]
ROSTIN A, ALBRECHT O, BAUCKMANN J, et al.A machine learning approach to foreign key discovery[C]//Proceedings of the 12th International Workshop on the Web and Databases.Providence, USA: [s.n.], 2009: 358-369.
[9]
PAPENBROCK T, KRUSE S, QUIANE-RUIZ J A, et al. Divide & conquer-based inclusion dependency discovery[J]. Proceedings of the VLDB Endowment, 2015, 8(7): 774-785. DOI:10.14778/2752939.2752946
[10]
XU Y, GOYAL R D.Primary key-foreign key relationship determination through machine learning: U.S.patent 10, 692, 015[P].2020-06-23.
[11]
WANG Jiamin, WANG Ning. Foreign key detection algorithm based on conflict dependence elimination in network forms[J]. Computer Science, 2019, 46(10): 195-201. (in Chinese)
王佳敏, 王宁. 基于冲突依赖消除的网络表格外键检测算法[J]. 计算机科学, 2019, 46(10): 195-201.
[12]
WU Xiao, WANG Hui, XIONG Ying, et al.SUNVE: distributed message middleware towards heterogeneous database synchronization[C]//Proceeding of the 10th Inter-national Conference on Advanced Infocomm Technology.Washington D.C., USA: IEEE Press, 2018: 160-166.
[13]
GAO Jintao, LIU Wenjie, LI Zhanhuai. A data synchroniza-tion strategy for distributed read-write separation system[J]. Journal of Northwerstern Polytechnical University, 2020, 38(1): 209-215. (in Chinese)
高锦涛, 刘文洁, 李战怀. 一种面向分布式读写分离系统的数据同步策略[J]. 西北工业大学学报, 2020, 38(1): 209-215. DOI:10.3969/j.issn.1000-2758.2020.01.026
[14]
GUNASEKARAM N, ZHAI G, YU Q. Sampled-data synchronization of delayed multi-agent networks and its application to coupled circuit[J]. Neurocomputing, 2020, 413: 499-511. DOI:10.1016/j.neucom.2020.05.060
[15]
ZHANG Huadong, SHAO Xiuli, WU Jun, et al. The study of transformation and data migration from SQL server database to HBase database[J]. Intelligent Computer and Applications, 2016, 6(5): 24-30, 34. (in Chinese)
张华东, 邵秀丽, 吴军, 等. SQL Server数据库到HBase数据库的模式转换和数据迁移研究[J]. 智能计算机与应用, 2016, 6(5): 24-30, 34. DOI:10.3969/j.issn.2095-2163.2016.05.007
[16]
SU Ziquan.Design and implementation of data increment synchronization system based on MySQL Binlog[D].Nanjing: Nanjing University, 2018.(in Chinese)
苏子权.基于MySQL Binlog的数据增量同步系统的设计与实现[D].南京: 南京大学, 2018.
[17]
JIANG Chunjing.Adaptive consistency algorithm design for uncertain multi-agent system under directed graph[D].Harbin: Harbin Institute of Technology, 2019.(in Chinese)
蒋春景.有向图下不确定多智能体系统自适应一致性算法设计[D].哈尔滨: 哈尔滨工业大学, 2019.
[18]
HARB J.Real-time broadcast content synchronization database system: U.S.patent 9, 940, 632[P].2018-04-10.
[19]
ABEDJAN Z, SCHULZE P, NAUMANN F.DFD: efficient functional dependency discovery[C]//Proceedings of the 23rd ACM International Conference on Information and Knowledge Management.New York, USA: ACM Press, 2014: 949-958.
[20]
GOYAL R D, MAHAJAN R.Inclusion dependency determination in a large database for establishing primary key-foreign key relationships: U.S.patent application 15/673, 511[P].2019-02-14.
[21]
WANG Chao, GUO Jilian, FU Lingyun.Research on the evaluation method of network node importance of battle system based on topological potential[J/OL].Defence Technology: 1-8[2020-08-31].http://kns.cnki.net/kcms/detail/11.2176.TJ.20200725.1338.020.html. (in Chinese)
王超, 郭基联, 符凌云.基于拓扑势的作战体系网络节点重要度评估方法研究[J/OL].兵工学报: 1-8[2020-08-31].http://kns.cnki.net/kcms/detail/11.2176.TJ.20200725.1338.020.html.
[22]
MA Yu. Virtual network embedding based on topology-aware node ordering[J]. Computer Measurement and Control, 2019, 27(7): 236-241. (in Chinese)
马煜. 基于拓扑感知节点排序的虚拟网络嵌入[J]. 计算机测量与控制, 2019, 27(7): 236-241.
[23]
NAUMOV M, VRIELINK A, GARLAND M.Parallel depth-first search for directed acyclic graphs[C]//Pro-ceedings of the 7th IEEE Workshop on Irregular Appli-cations: Architectures and Algorithms.Washington D.C., USA: IEEE Press, 2017: 1-8.