掌桥专利:专业的专利平台
掌桥专利
首页

银行交易资金回流多线程并行检测方法及系统

文献发布时间:2023-06-19 19:30:30


银行交易资金回流多线程并行检测方法及系统

技术领域

本发明涉及大数据分析处理技术领域,特别是涉及一种银行交易资金回流多线程并行检测方法及系统。

背景技术

在金融大数据分析领域,银行交易记录中的资金回流意味着可能存在金融欺诈行为,是银行金融风控和金融监管的一项重要内容。由于银行交易记录数据量庞大,可能包含数十亿个账户和数千亿甚至万亿条交易流水,而账户之间的交易信息可能错综复杂,因此如何从海量复杂数据中快速检测出存在回流预警的交易环路是需要解决的重要问题。

图数据结构使用顶点和边表示一组对象及对象之间的关系,可以使用有向图直观、自然地对银行交易数据进行建模,然后利用有向图中的环路挖掘进行交易资金回流的检测。传统的有向环路求解方法大多是串行的思想,利用图上的深度优先搜索遍历来检测环路。串行方法需要高额的数据访问开销和计算开销以遍历整个有向图寻找图中存在的所有有向环路,对银行交易记录这种海量数据使用串行方法进行环路求解存在许多不足。一方面,串行方法无法充分利用多核多处理器的高并发性,造成底层硬件资源的大幅度浪费;另一方面串行环路挖掘效率低,导致资金回流链路检测的反馈时间延迟,无法满足实时金融风控和监管的需求。

发明内容

本发明的目的是提供一种银行交易资金回流多线程并行检测方法及系统,通过将计算任务分解到多个线程上并行执行,充分利用底层多核处理器的高并发性缩短算法执行时间,提高存在回流预警的交易环路的挖掘效率。

为实现上述目的,本发明提供了如下方案:

一种银行交易资金回流多线程并行检测方法,包括:

根据银行交易记录构建有向图及其邻接表存储结构,并增加一个虚拟顶点来指向有向图中每一个顶点;

基于所述有向图创建线程间共享内存数据结构,定义并初始化线程内局部数据结构;

基于所述线程间共享内存数据结构和所述线程内局部数据结构,调用多个线程同时从所述虚拟顶点出发进行深度优先搜索遍历执行有向环路求解算法;

所有线程运行结束之后,利用所述线程间共享内存数据结构中的环路集合输出检测到的资金回流环路。

可选地,所述根据银行交易记录构建有向图及其邻接表存储结构,并增加一个虚拟顶点来指向有向图中每一个顶点,具体包括:

获取银行交易记录;所述银行交易记录中包括多条交易流水;

将每一条交易流水对应一条有向边,资金转出账户作为起始顶点,资金转入账户作为终止顶点,构建出银行交易记录的有向图;

为所述有向图中的每个顶点

在所述有向图中增加一个虚拟顶点

可选地,所述基于所述有向图创建线程间共享内存数据结构,定义并初始化线程内局部数据结构,具体包括:

针对所述有向图中的每个顶点

针对每一个线程p定义两个线程内局部数据结构,分别为控制栈

初始化所述控制栈

可选地,所述所有线程运行结束之后,利用所述线程间共享内存数据结构中的环路集合输出检测到的资金回流环路,具体包括:

所有线程运行结束之后,扫描所述线程间共享内存数据结构中的环路集合的并查集,找出每个环路顶点集合的根节点,并根据根节点的个数统计总的资金回流环路个数;

对每个并查集根节点创建一个环路链表存放该根节点所在环路的顶点信息,初始化为空;

遍历有向图中的每个顶点,利用并查集上的查找算法找到该顶点的根结点,将该顶点添加至对应根节点的环路链表中;

根据每个并查集根节点对应的环路链表输出预设交易长度范围内的资金回流环路。

一种银行交易资金回流多线程并行检测系统,包括:

有向图及邻接表构建模块,用于根据银行交易记录构建有向图及其邻接表存储结构,并增加一个虚拟顶点来指向有向图中每一个顶点;

数据结构构建模块,用于基于所述有向图创建线程间共享内存数据结构,定义并初始化线程内局部数据结构;

多线程并行检测模块,用于基于所述线程间共享内存数据结构和所述线程内局部数据结构,调用多个线程同时从所述虚拟顶点出发进行深度优先搜索遍历执行有向环路求解算法;

资金回流交易信息输出模块,用于在所有线程运行结束之后,利用所述线程间共享内存数据结构中的环路集合输出检测到的资金回流环路。

可选地,所述有向图及邻接表构建模块具体包括:

交易记录获取单元,用于获取银行交易记录;所述银行交易记录中包括多条交易流水;

有向图构建单元,用于将每一条交易流水对应一条有向边,资金转出账户作为起始顶点,资金转入账户作为终止顶点,构建出银行交易记录的有向图;

邻接表构建单元,用于为所述有向图中的每个顶点

虚拟顶点增加单元,用于在所述有向图中增加一个虚拟顶点

可选地,所述数据结构构建模块具体包括:

线程间共享内存数据结构构建单元,用于针对所述有向图中的每个顶点

线程内局部数据结构构建单元,用于针对每一个线程p定义两个线程内局部数据结构,分别为控制栈

线程内局部数据结构初始化单元,用于初始化所述控制栈

可选地,所述资金回流交易信息输出模块具体包括:

资金回流环路个数统计单元,用于在所有线程运行结束之后,扫描所述线程间共享内存数据结构中的环路集合的并查集,找出每个环路顶点集合的根节点,并根据根节点的个数统计总的资金回流环路个数;

根节点环路链表创建单元,用于对每个并查集根节点创建一个环路链表存放该根节点所在环路的顶点信息,初始化为空;

遍历查找单元,用于遍历有向图中的每个顶点,利用并查集上的查找算法找到该顶点的根结点,将该顶点添加至对应根节点的环路链表中;

资金回流环路输出单元,用于根据每个并查集根节点对应的环路链表输出预设交易长度范围内的资金回流环路。

根据本发明提供的具体实施例,本发明公开了以下技术效果:

本发明提供了一种银行交易资金回流多线程并行检测方法及系统,所述方法包括:根据银行交易记录构建有向图及其邻接表存储结构,并增加一个虚拟顶点来指向有向图中每一个顶点;基于所述有向图创建线程间共享内存数据结构,定义并初始化线程内局部数据结构;基于所述线程间共享内存数据结构和所述线程内局部数据结构,调用多个线程同时从所述虚拟顶点出发进行深度优先搜索遍历执行有向环路求解算法;所有线程运行结束之后,利用所述线程间共享内存数据结构中的环路集合输出检测到的资金回流环路。本发明方法通过将计算任务分解到多个线程上并行执行,充分利用了底层多核处理器的高并发性缩短了算法执行时间,提高了存在回流预警的交易环路的挖掘效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明一种银行交易资金回流多线程并行检测方法的流程图;

图2为本发明一种银行交易资金回流多线程并行检测方法的原理示意图;

图3为本发明实施例提供的从银行交易记录中构建的有向图及其邻接表存储结构的示意图;

图4为本发明实施例提供的调用多个线程同时从虚拟顶点出发执行环路求解任务中每个线程的过程示意图;

图5为本发明实施例提供的环路集合对应的并查集进行合并之前和合并之后的变化示意图;

图6为本发明实施例提供的所有线程求解结束后利用并查集输出资金回流环路信息的过程示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明的目的是提供一种银行交易资金回流多线程并行检测方法及系统,通过将计算任务分解到多个线程上并行执行,充分利用底层多核处理器的高并发性缩短算法执行时间,提高存在回流预警的交易环路的挖掘效率。

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

图1为本发明一种银行交易资金回流多线程并行检测方法的流程图,图2为本发明一种银行交易资金回流多线程并行检测方法的原理示意图。参见图1和图2,本发明一种银行交易资金回流多线程并行检测方法包括:

步骤1:根据银行交易记录构建有向图及其邻接表存储结构,并增加一个虚拟顶点来指向有向图中每一个顶点。

图3为本发明实施例从银行交易记录中构建的有向图及其邻接表存储结构的示意图。参见图3,所述步骤1根据银行交易记录构建有向图及其邻接表存储结构,并增加一个虚拟顶点来指向有向图中每一个顶点,具体包括:

步骤1.1:获取银行交易记录;所述银行交易记录中包括多条交易流水。

步骤1.2:将每一条交易流水对应一条有向边,资金转出账户作为起始顶点,资金转入账户作为终止顶点,构建出银行交易记录的有向图,如图3中左图所示,图中a、b、c、d、e、f、g均为有向图中的顶点。

步骤1.3:为所述有向图中的每个顶点

具体地,使用哈希表存储所有的顶点信息,对每个顶点构建使用哈希表存储的邻接表结构。对每条有向边

步骤1.4:在所述有向图中增加一个虚拟顶点

具体地,在原始有向图中增加一个虚拟顶点

步骤2:基于所述有向图创建线程间共享内存数据结构,定义并初始化线程内局部数据结构。

该步骤2目的在于定义并初始化数据结构,包括线程间共享内存数据结构(以下也简称共享内存数据结构)和线程内局部数据结构(以下也简称局部数据结构)。

所述步骤2基于所述有向图创建线程间共享内存数据结构,定义并初始化线程内局部数据结构,具体包括:

步骤2.1:针对所述有向图中的每个顶点

对每一个顶点

2.1.1每个顶点在环路求解过程中共区分三个状态,使用状态集合status(v)进行记录:

顶点

顶点

顶点

初始化时每个顶点状态为unvisited。

2.1.2每个顶点可能同时被一个或多个线程处理,使用线程集合thread(v)记录当前处理该顶点的所有线程,初始化为空;当某一线程访问顶点

2.1.3在多个线程进行深度优先搜索遍历过程当中,当前找到的环路可能不是最终结果,因此使用环路集合circle(v)记录所有参与任务求解的线程当前所找到的

2.1.3.1设顶点

2.1.3.2初始化时每个顶点对应一个独立的环路集合,即

步骤2.2:针对每一个线程p定义两个线程内局部数据结构,分别为控制栈

步骤2.3:初始化所述控制栈

步骤3:基于所述线程间共享内存数据结构和所述线程内局部数据结构,调用多个线程同时从所述虚拟顶点出发进行深度优先搜索遍历执行有向环路求解算法。

图4为本发明实施例调用多个线程同时从虚拟顶点出发执行环路求解任务中每个线程的过程示意图。参见图4,每个线程使用一个局部控制栈以非递归方式进行深度优先搜索遍历,同时使用一个顶点栈记录向前遍历过程中访问到的顶点序列。

所述步骤3基于所述线程间共享内存数据结构和所述线程内局部数据结构,调用多个线程同时从所述虚拟顶点出发进行深度优先搜索遍历执行有向环路求解算法,具体包括:

步骤3.1:首先,将虚拟顶点

步骤3.2:取线程p控制栈的栈顶元素

3.2.1:若w状态是dead,说明w所在的有向环已经完全识别出来,其所在环路中的顶点包括w在内已全部存放在

3.2.2:若w状态是unvisited或者w与当前线程p的顶点栈

其中判断

3.2.2.1:设顶点w和顶点

3.2.2.2:沿着

3.2.2.3:若

3.2.2.4:若此时进一步确定

3.2.3:若w状态不是unvisited并且w与当前顶点栈

3.2.3.1:依次从顶点栈

3.2.3.2:取出顶点栈

3.2.3.3:合并r的环路集合与r’的环路集合,合并之后r与r’的环路集合相等,即

3.2.3.4:重复上述操作一直到顶点v和顶点w处于同一个环路集合中,即

以上过程可概括为依次从顶点栈

3.2.3.5:设待合并的两个集合分别为顶点x和顶点y所在的环路集合

3.2.3.6:沿着

3.2.3.7:在查找的同时进行并查集路径压缩优化,即修改查找路径上的每个节点的父节点直接指向根结点,修改操作使用无锁机制。

3.2.3.8:根据

步骤3.3:当

步骤3.4:从控制栈

步骤3.4.1:修改

步骤3.4.2:如果

步骤3.5:若线程p的控制栈

当控制栈

步骤4:所有线程运行结束之后,利用所述线程间共享内存数据结构中的环路集合输出检测到的资金回流环路。

图6为本发明实施例所有线程求解结束后利用并查集输出资金回流环路信息的过程示意图。参见图6,所有线程运行结束之后,使用一个主线程利用共享内存数据结构中的环路集合信息输出所有检测到的资金回流环路。

所述步骤4所有线程运行结束之后,利用所述线程间共享内存数据结构中的环路集合输出检测到的资金回流环路,具体包括:

步骤4.1:所有线程运行结束之后,扫描所述线程间共享内存数据结构中的环路集合的并查集,找出每个环路顶点集合的根节点,并根据根节点的个数统计总的资金回流环路个数;

扫描存储环路集合的并查集统计环路的总个数,环路总数等于并查集中根节点的总数,因此在扫描过程中统计根节点的个数即可,节点v为根节点的判断条件为:

步骤4.2:对每个并查集根节点v创建一个环路链表

步骤4.3:遍历有向图中的每个顶点w,利用并查集上的查找算法找到该顶点w的根结点

步骤4.4:根据每个并查集根节点对应的环路链表输出预设交易长度范围内的资金回流环路;

具体地,根据每个根节点v对应的环路链表

本发明方法首先从银行交易记录中构建有向图的邻接表存储结构,并增加一个虚拟顶点令其指向原始图中每一个顶点;创建线程间共享内存数据结构,定义并初始化线程内局部数据结构;然后调用多个线程同时从虚拟顶点出发进行深度优先搜索遍历,执行环路求解算法;所有线程运行结束之后,利用共享内存数据结构中的环路集合输出所有检测到的资金回流交易环路信息。与已有技术相比,本发明方法的有益效果体现在:

(1)采用多线程并行计算的方式检测资金回流环路,能够充分利用底层硬件多核多处理器的高并发性,有效提升计算性能,降低反馈延迟,可以处理包含数十亿个顶点和数千亿至万亿条边的大规模银行交易数据,能够满足实际应用的需求;

(2)不需要对图进行划分,每个线程都可以访问图中任意顶点,通过共享内存数据结构实现线程间的通信;当找到部分环路时及时进行环路合并,同时修改相应顶点对应的状态通知其他线程。该策略避免对图进行预处理,节省了预处理所需的空间和时间开销;

(3)使用邻接表存储结构构建图时增加一个虚拟顶点,并令其指向原始有向图中的每个顶点,在进行多线程调用时,采用每个线程都从虚拟顶点出发并随机选择下一个邻接点的方式,可以均匀分散图数据到不同的线程中处理,提高了线程间的并行计算能力;

(4)采用加权以及路径压缩优化的并查集数据结构表示环路集合,可以快速实现环路集合的查找、合并、判断等操作,同时在多线程通信时采用无锁机制实现并查集上的读写操作,进一步提高了并发性从而提高了计算效率。

基于本发明提供的方法,本发明还提供一种银行交易资金回流多线程并行检测系统,所述系统包括:

有向图及邻接表构建模块,用于根据银行交易记录构建有向图及其邻接表存储结构,并增加一个虚拟顶点来指向有向图中每一个顶点;

数据结构构建模块,用于基于所述有向图创建线程间共享内存数据结构,定义并初始化线程内局部数据结构;

多线程并行检测模块,用于基于所述线程间共享内存数据结构和所述线程内局部数据结构,调用多个线程同时从所述虚拟顶点出发进行深度优先搜索遍历执行有向环路求解算法;

资金回流交易信息输出模块,用于在所有线程运行结束之后,利用所述线程间共享内存数据结构中的环路集合输出检测到的资金回流环路。

其中,所述有向图及邻接表构建模块具体包括:

交易记录获取单元,用于获取银行交易记录;所述银行交易记录中包括多条交易流水;

有向图构建单元,用于将每一条交易流水对应一条有向边,资金转出账户作为起始顶点,资金转入账户作为终止顶点,构建出银行交易记录的有向图;

邻接表构建单元,用于为所述有向图中的每个顶点

虚拟顶点增加单元,用于在所述有向图中增加一个虚拟顶点

所述数据结构构建模块具体包括:

线程间共享内存数据结构构建单元,用于针对所述有向图中的每个顶点

线程内局部数据结构构建单元,用于针对每一个线程p定义两个线程内局部数据结构,分别为控制栈

线程内局部数据结构初始化单元,用于初始化所述控制栈

所述资金回流交易信息输出模块具体包括:

资金回流环路个数统计单元,用于在所有线程运行结束之后,扫描所述线程间共享内存数据结构中的环路集合的并查集,找出每个环路顶点集合的根节点,并根据根节点的个数统计总的资金回流环路个数;

根节点环路链表创建单元,用于对每个并查集根节点创建一个环路链表存放该根节点所在环路的顶点信息,初始化为空;

遍历查找单元,用于遍历有向图中的每个顶点,利用并查集上的查找算法找到该顶点的根结点,将该顶点添加至对应根节点的环路链表中;

资金回流环路输出单元,用于根据每个并查集根节点对应的环路链表输出预设交易长度范围内的资金回流环路。

本发明提供的一种银行交易资金回流多线程并行检测方法及系统,通过将计算任务分解到多个线程上并行执行,充分利用底层多核处理器的高并发性缩短算法执行时间,提高任务求解效率,从而获得更好的性能,为金融大数据分析在风险控制和金融监管中的应用提供有效支持。

对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。

技术分类

06120115931601