撮合匹配方法、装置和系统
技术领域
本说明书涉及数据处理技术领域,尤其涉及撮合匹配方法、装置和系统。
背景技术
撮合是指在多方交易等场景中,存在中间一方将多个需求方的信息或资源集中起来,然后将信息或资源进行匹配,以便产生符合各个需求方条件的匹配结果。随着需求方数量的增加,存在相似需求的不同需求方之间可能存在一定的竞争,进而导致撮合匹配性能下降。
发明内容
基于此,本说明书提供了撮合匹配方法、装置和系统。
根据本说明书实施例的第一方面,提供一种撮合匹配方法,所述方法包括:获取携带第一逻辑位的第一需求方;获取与所述第一逻辑位相匹配的第二逻辑位,从携带所述第二逻辑位的各个第二需求方中查找与所述第一需求方相匹配的目标第二需求方;将所述第一需求方与所述目标第二需求方进行撮合匹配。
进一步地,所述方法还包括:若从携带所述第二逻辑位的各个第二需求方中未查找到所述目标第二需求方,从未经撮合匹配的各个第二需求方中查找与所述第一需求方相匹配的目标第二需求方。
进一步地,所述方法还包括:若在未经撮合匹配的各个第二需求方中均未查找到与所述第一需求方相匹配的目标第二需求方,暂停对所述第一需求方的撮合匹配,直到所述第二需求方发生更新。
进一步地,在获取携带第一逻辑位的第一需求方之前,所述方法还包括:在接收到各个第一需求方发送的撮合匹配请求之后,分别为各个第一需求方生成第一逻辑位;将携带相同第一逻辑位的第一需求方存储至同一逻辑桶,以便从所述逻辑桶中获取第一需求方。
进一步地,在将所述第一需求方与所述目标第二需求方进行撮合匹配之后,所述方法还包括:计算所述第一需求方的第一需求量与所述第二需求方的第二需求量之间的差额;若所述差额不为零,根据所述第一需求量与第二需求量对存在富余需求量的需求方进行更新,并停止对不存在富余需求量的需求方进行撮合匹配。
根据本说明书实施例的第二方面,提供一种撮合匹配装置,所述装置包括:获取模块,用于获取携带第一逻辑位的第一需求方;查找模块,用于获取与所述第一逻辑位相匹配的第二逻辑位,从携带所述第二逻辑位的各个第二需求方中查找与所述第一需求方相匹配的目标第二需求方;撮合模块,用于将所述第一需求方与所述目标第二需求方进行撮合匹配。
根据本说明书实施例的第三方面,提供一种撮合匹配系统,所述系统包括:撮合决策模块,多个第一逻辑桶和多个第二逻辑桶;所述第一逻辑桶用于存储第一需求方的撮合匹配需求;其中,同一个第一逻辑桶对应的各个第一需求方携带有相同的第一逻辑位;所述第二逻辑桶用于存储第二需求方的撮合匹配需求;其中,同一个第二逻辑桶对应的各个第二需求方携带有相同的第二逻辑位;所述撮合决策模块用于从所述第一逻辑桶中获取携带第一逻辑位的第一需求方,获取与所述第一逻辑位相匹配的第二逻辑位,根据所述第二逻辑位从对应的第二逻辑桶中查找与所述第一需求方相匹配的目标第二需求方,并将所述第一需求方与所述目标第二需求方进行撮合匹配。
进一步地,所述系统还包括:任务调度模块,用于从所述第一逻辑桶中捞取所述撮合决策模块未匹配完成的第一剩余需求方,并从各个第二逻辑桶中查找与所述第一剩余需求方相匹配的目标第二需求方。
进一步地,所述撮合决策模块还用于:获取所述任务调度模块未匹配完成的第二剩余需求方,暂停对所述第二剩余需求方的撮合匹配,直到检测到所述第二逻辑桶发生更新。
进一步地,所述撮合决策模块还用于:计算所述第一需求方的第一需求量与所述第二需求方的第二需求量之间的差额;若所述差额不为零,根据所述第一需求量与第二需求量对存在富余需求量的需求方对应的逻辑桶进行更新,并停止对不存在富余需求量的需求方进行撮合匹配。
根据本说明书实施例的第四方面,提供一种计算机存储介质,所述存储介质中存储有程序,所述程序被处理器执行时实现上述任一实施例中的方法。
根据本说明书实施例的第五方面,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一实施例中的方法。
应用本说明书实施例方案,在进行撮合匹配时,只有第一逻辑位与第二逻辑位匹配时,才将对应的第一需求方与第二需求方进行撮合匹配,而不是将第一需求方与系统中所有的第二需求方进行撮合匹配,由于不同的第一需求方具有不同的第一逻辑位,因此,各个第一需求方会匹配到不同的第二需求方,减少了各个第一需求方之间对同一第二需求方的竞争,提高了撮合匹配性能。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书一起用于解释本说明书的原理。
图1是本说明书一个实施例的撮合匹配方法流程图。
图2是本说明书一个实施例的分桶多级撮合整体架构图。
图3是本说明书一个实施例的分桶多级示意图。
图4是本说明书一个实施例的分桶多级撮合中第一级撮合的时序图。
图5是本说明书一个实施例的分桶多级撮合中第二级撮合的时序图。
图6是本说明书一个实施例的撮合匹配装置的框图。
图7是本说明书一个实施例的撮合匹配系统的示意图。
图8是本说明书一个实施例的用于实施本说明书实施例方法的计算机设备的示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
在撮合匹配过程中,通常包括两个需求方(第一需求方和第二需求方),也可以包括多个需求方,本说明书以两个需求方为例对撮合匹配过程进行说明。两个需求方均可以在撮合匹配平台发布需求,撮合匹配平台根据需求双方的需求对这两个需求方进行撮合匹配。一种常见的撮合匹配场景是在线P2P平台中,借款人与投资者的需求撮合。单从某一向的撮合看,例如第一需求方(需求方A)匹配第二需求方(需求方B),这种场景简称A2B场景。对于B2A场景,其与A2B场景对称,此处不再赘述。
如图1所示,本说明书实施例的撮合匹配方法可包括以下步骤:
步骤102,获取携带第一逻辑位的第一需求方;
步骤104,获取与所述第一逻辑位相匹配的第二逻辑位,从携带所述第二逻辑位的各个第二需求方中查找与所述第一需求方相匹配的目标第二需求方;
步骤106,将所述第一需求方与所述目标第二需求方进行撮合匹配。
在本实施例中,第一需求方和第二需求方是指待撮合匹配的交易对手方。第一逻辑位是为第一需求方生成的逻辑位。当需求方的需求提交到撮合匹配平台时,撮合匹配平台可以自动为需求方生成逻辑位,逻辑位可以是一串字符串,例如,可以由数字、字母、下划线的组合生成,或者根据其他方式生成。生成的方式可以是随机生成;也可以是根据需求方的需求分配,例如,为具有相似需求的需求方分配相同的逻辑位。以借贷场景为例,假设存在A1、A2和A3这三个第一需求方,其中,A1的需求为借入50元,A2和A3的需求均为借入500元,则可以随机为A1、A2和A3分配逻辑位,也可以为A1分配逻辑位a1,并为A2和A3分配逻辑位a2。
为了便于数据处理,可以设置多个逻辑桶(简称桶),为了便于区分存储第一需求方和第二需求方的桶,可将存储第一需求方的桶称为A桶,将存储第二需求方的桶称为B桶。每个桶用于存储具有某一逻辑位的需求,也就是说,逻辑位用于标识需求方所在的桶。例如,A桶01用于存储第一逻辑位为a1的需求,A桶02用于存储第一逻辑位为a2的需求,以此类推。同理,第二需求方的需求也可以按照类似的方式分别存储至各个B桶中。
在进行撮合匹配时,可以先获取与第一需求位相匹配的第二逻辑位,即,第二需求方的逻辑位。系统可以根据第一需求位按照一定的策略计算得到决策位,决策位用于表示与第一需求方相匹配的第二需求方对应于哪个B桶。确定第二需求方对应的B桶之后,只在该B桶中查找与第一需求方相匹配的目标第二需求方,找到之后,将所述第一需求方与所述目标第二需求方进行撮合匹配。
在一个实施例中,可以在接收到各个第一需求方发送的撮合匹配请求之后,分别为各个第一需求方生成第一逻辑位;将携带相同第一逻辑位的第一需求方存储至同一逻辑桶(A桶),将携带不同第一逻辑位的第一需求方存储至不同的逻辑桶,以便从所述逻辑桶中获取第一需求方。还可以通过类似的方式为各个第二需求方生成第二逻辑位,并将携带相同第二逻辑位的第二需求方存储至同一逻辑桶(B桶)。
上述实施例在进行撮合匹配时,只有第一逻辑位与第二逻辑位匹配时,才将对应的第一需求方与第二需求方进行撮合匹配,而不是将第一需求方与系统中所有的第二需求方进行撮合匹配,由于不同的第一需求方具有不同的第一逻辑位,因此,各个第一需求方会匹配到不同的第二需求方,减少了各个第一需求方之间对同一第二需求方的竞争,提高了撮合匹配性能。
由于限制了撮合匹配的范围,因此,有可能存在一种情况,即,携带与第一逻辑位匹配的第二逻辑位的第二需求方中无法查找到与第一需求方匹配的目标第二需求方。因此,在一个实施例中,若从携带所述第二逻辑位的各个第二需求方中未查找到所述目标第二需求方,从未经撮合匹配的各个第二需求方中查找与所述第一需求方相匹配的目标第二需求方。这里未经撮合匹配的各个第二需求方,即所有B桶中的第二需求方,无论其第二逻辑位是什么。本实施例通过两级撮合方式,先在特定的桶中查找目标第二需求方,再在全体第二需求方中查找目标第二需求方,一方面减少了具有相似需求的第一需求方之间的竞争,另一方面减少了第一次撮合匹配过程中的遗漏,提高了撮合匹配的全面性。
上述撮合匹配过程可称为两级撮合过程,如图2和图3所示,从需求方A的视角来看,撮合平台可以接收需求方A的撮合请求,然后执行A2B撮合,为生成逻辑位,同时将需求方A的需求落库到A桶。撮合决策模块可以接收对需求B的撮合,然后生成决策位,并将决策位与B桶的逻辑位进行匹配,以找到对应的B桶,然后在B桶中根据需求方A的需求查找对应的目标第二需求方。此为第一级撮合,如果A桶中存在未撮合成功的需求,则执行第二级撮合,即,任务调度模块从A桶中捞取若干个未匹配完成的需求,然后将捞取的各个需求分别与所有的需求方B进行匹配。
决策模块在决策时,可以根据预先设定好的策略生成决策位,例如,可以随机生成决策位,或者将决策位设为与A桶的逻辑位相同。以图3所示的系统为例,对于存储逻辑位为04的需求的A桶,可以随机为其生成一个决策位,例如,决策位为03,则为其匹配存储逻辑位为03的需求的B桶;也可以为其生成与第一逻辑位相同的决策位,即决策位为04,则可为其匹配存储逻辑位为04的需求的B桶。当然,在实际应用中,A桶和B桶的总数可以相同,也可以不同。
在实际应用中,为提高撮合效率,撮合平台可以独立并行地对各个A桶中的需求进行处理,对于每个桶内的需求,撮合平台可以重复执行两级撮合过程,直到A桶中的第一需求或者B桶中的第二需求撮合完毕。
在一个实施例中,若在未经撮合匹配的各个第二需求方中均未查找到与所述第一需求方相匹配的目标第二需求方,暂停对所述第一需求方的撮合匹配,直到所述第二需求方发生更新。本实施例中,如果在未经撮合匹配的各个第二需求方中均未查找到与所述第一需求方相匹配的目标第二需求方,则表示目前存在的第二需求方中没有与第一需求方相匹配的目标第二需求方,因此,即便继续进行撮合匹配,也无法查找到与第一需求方相匹配的目标第二需求方。因此,在这种情况下,可以先暂停对相应第一需求方的匹配,直到第二需求方存在更新(例如,产生新的第二需求方,或者第二需求方的需求发生变化等情况),再重新对未匹配成功的第一需求方进行撮合匹配。
在将所述第一需求方与所述目标第二需求方进行撮合匹配之后,还可以计算所述第一需求方的第一需求量与所述第二需求方的第二需求量之间的差额;若所述差额不为零,根据所述第一需求量与第二需求量对存在富余需求量的需求方进行更新,并停止对不存在富余需求量的需求方进行撮合匹配。
以网络借贷系统为例,假设第一需求方的需求为借入500元,第二需求方的需求为借出800元,即,第一需求方的第一需求量为500,第二需求方的第二需求量为800。此时,第一需求量与第二需求量之间的差额为800-500=300,由于差额不为零,因此,第一需求方撮合完成,但第二需求方存在富余需求量,并未撮合完成,此时可以停止对第一需求方的撮合匹配,同时更新第二需求方的需求。
在实际应用中,第一级撮合和第二级撮合可以分别采用图4和图5所示的方式进行。如图4所示,在第一级撮合过程中,当需求方A发起需求时,撮合平台首先接收撮合请求,然后,将需求方A的当前状态设置为WAIT_MATCH(即,待撮合状态),并落地逻辑位至需求方A的数据库(即,A桶),可以随机生成需求方A的逻辑位,也可以根据足够随机的字段固定规则生成。然后,、分桶决策模块随机生成(或根据分桶数量顺序返回)需求方A对应的决策位,从而使撮合平台获取本次匹配的需求方B的逻辑位,获取之后,撮合平台向需求方B的数据库(即,B桶)构造匹配查询请求,并捞取B桶中的需求。撮合平台更新发起方状态为MATCHING(即,正在撮合状态),更新成功则继续。然后,开始循环撮合,直到需求A消化完毕或者需求B队列消化完毕。循环过程中,撮合平台计算需求双方可匹配的资源,即需求量。计算资源之前,还可以进行必要的检查,即,判断需求双方是否符合撮合平台预设的条件,例如,需求双方是否为同一用户等。匹配到目标需求方B之后,可以开启本地事务,抢占需求A和需求B的资源,落地交易流水,并广播撮合匹配的结果。撮合匹配结果中可以携带撮合流水的ID号。如果未匹配到接收方,则将需求发起方的状态更新为WAIT_NEW_MATCH,这部分需求发起方短时间内无法找到对应的接收方,暂停对这部分需求发起方的撮合。如果匹配到接收方,但是没有撮合完成(例如,存在剩余需求量),则将需求发起方的状态更新回WAIT_MATCH。如果匹配到接收方,且撮合完成,则将需求发起方的状态更新为MATCHED,表示这部分需求方已完成撮合匹配。
如图5所示,在第二级撮合过程中,撮合平台定时对任务调度系统进行整合,可以按照一定的时间间隔捞取第一级撮合过程中未完成撮合匹配的需求A,然后,构造需求B的匹配查询请求,从需求B的数据库中捞取接收方数据,捞取的接收方是状态为WAIT_NEW_MATCH的需求方。随着撮合匹配过程的持续进行,会存在一部分需求B始终无法与需求A进行匹配,这就说明这部分需求B在撮合平台中不存在相匹配的需求A,因此,将这部分需求B标记为WAIT_NEW_MATCH,从而暂停对这部分需求B的撮合匹配,直到需求A发生更新。捞取需求B之后,更新发起方状态为MATCHING,更新成功则继续。然后,开始循环撮合,直到需求A消化完毕或者需求B队列消化完毕。循环过程中,撮合平台计算需求双方可匹配的资源,即需求量。计算资源之前,还可以进行必要的检查,即,判断需求双方是否符合撮合平台预设的条件,例如,需求双方是否为同一用户等。匹配到目标需求方B之后,可以开启本地事务,抢占需求A和需求B的资源,如果需求B剩余资源为0则标记为MATCHED。然后,落地交易流水,并广播撮合匹配的结果。撮合匹配结果中可以携带撮合流水的ID号。如果未匹配到接收方,则将需求发起方的状态更新为WAIT_NEW_MATCH,这部分需求发起方短时间内无法找到对应的接收方,暂停对这部分需求发起方的撮合。如果匹配到接收方,但是没有撮合完成(例如,存在剩余需求量),则将需求发起方的状态更新回WAIT_MATCH。如果匹配到接收方,且撮合完成,则将需求发起方的状态更新为MATCHED,表示这部分需求方已完成撮合匹配。
针对处理过程中发生任何异常中断的情况,此时则需要依赖于定时任务发起同样的第二轮撮合继续流程。
本说明书实施例的方案,在接收到需求请求时,系统会为需求主动标识一个逻辑位,然后在第一级撮合通过分桶决策模块返回的决策位,在需求B的数据库中进行匹配。在并发场景下,多次不同的需求A可以借由不同的决策位分配来减少甚至避免冲突。而撮合决策可以仅是随机分配,或者是在顺序分配。
撮合平台集群可以分布式的处理需求请求,且不会因为并发导致大量的被匹配方资源竞争的问题。通过两级匹配的方式同时满足的并发撮合的高效,同时可以避免遗漏本可以匹配的撮合。分桶两级撮合适用于匹配双方,并不局限在单个方向的撮合匹配,同时可以支持双向的撮合。
以上实施例中的各种技术特征可以任意进行组合,只要特征之间的组合不存在冲突或矛盾,但是限于篇幅,未进行一一描述,因此上述实施方式中的各种技术特征的任意进行组合也属于本说明书公开的范围。
如图6所示,本说明书实施例还提供一种撮合匹配装置,所述装置可包括:
获取模块602,用于获取携带第一逻辑位的第一需求方;
查找模块604,用于获取与所述第一逻辑位相匹配的第二逻辑位,从携带所述第二逻辑位的各个第二需求方中查找与所述第一需求方相匹配的目标第二需求方;
撮合模块606,用于将所述第一需求方与所述目标第二需求方进行撮合匹配。
上述装置中各个模块的功能和作用的实现过程具体详情见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
如图7所示,本说明书实施例还提供一种撮合匹配系统,所述系统可包括:
撮合决策模块,多个第一逻辑桶和多个第二逻辑桶;
所述第一逻辑桶用于存储第一需求方的撮合匹配需求;其中,同一个第一逻辑桶对应的各个第一需求方携带有相同的第一逻辑位;
所述第二逻辑桶用于存储第二需求方的撮合匹配需求;其中,同一个第二逻辑桶对应的各个第二需求方携带有相同的第二逻辑位;
所述撮合决策模块用于从所述第一逻辑桶中获取携带第一逻辑位的第一需求方,获取与所述第一逻辑位相匹配的第二逻辑位,根据所述第二逻辑位从对应的第二逻辑桶中查找与所述第一需求方相匹配的目标第二需求方,并将所述第一需求方与所述目标第二需求方进行撮合匹配。
进一步地,所述系统还可包括:任务调度模块,用于从所述第一逻辑桶中捞取所述撮合决策模块未匹配完成的第一剩余需求方,并从各个第二逻辑桶中查找与所述第一剩余需求方相匹配的目标第二需求方。
进一步地,所述撮合决策模块还用于:获取所述任务调度模块未匹配完成的第二剩余需求方,暂停对所述第二剩余需求方的撮合匹配,直到检测到所述第二逻辑桶发生更新。
进一步地,所述撮合决策模块还用于:计算所述第一需求方的第一需求量与所述第二需求方的第二需求量之间的差额;若所述差额不为零,根据所述第一需求量与第二需求量对存在富余需求量的需求方对应的逻辑桶进行更新,并停止对不存在富余需求量的需求方进行撮合匹配。
本说明书装置的实施例可以应用在计算机设备上,例如服务器或终端设备。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在文件处理的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图8所示,为本说明书装置所在计算机设备的一种硬件结构图,除了图8所示的处理器802、内存804、网络接口806、以及非易失性存储器808之外,实施例中装置所在的服务器或电子设备,通常根据该计算机设备的实际功能,还可以包括其他硬件,对此不再赘述。
相应地,本说明书实施例还提供一种计算机存储介质,所述存储介质中存储有程序,所述程序被处理器执行时实现上述任一实施例中的方法。
相应地,本说明书实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一实施例中的方法。
本申请可采用在一个或多个其中包含有程序代码的存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。计算机可用存储介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括但不限于:相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
本领域技术人员在考虑说明书及实践这里公开的说明书后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
以上所述仅为本公开的较佳实施例而已,并不用以限制本公开,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开保护的范围之内。