双向撮合方法、装置以及交易系统
技术领域
本申请涉及互联网技术领域,尤其涉及一种双向撮合方法、装置以及一种具有该双向撮合装置的交易系统。
背景技术
随着互联网技术以及通信技术的快速发展,越来越多的用户通过互联网来进行投资理财。投资理财平台为融资者和投资者提供了一种交流平台,融资者和投资者可以通过投资理财平台来达到满足自身需求的目的。其中,投资理财平台可通过对融资者发布的融资需求以及投资者发布的投资需求进行撮合,以撮合到符合自身需求的业务或预约单。
相关技术中,为了进行业务和预约单的撮合,常见的处理方式为单向撮合,例如,对投资者发布的预约单、融资者发布的业务分别进行数据模型建模,并将建模后的预约单、业务保存在关系型数据库或者内存数据结构如队列、列表、数组中,最后,对业务遍历扫描,按照业务中的需求参数(如利率、期限等元数据)寻找符合条件的预约单。
但是,目前存在的问题是,上述单向撮合方式需要按照时间顺序循环查找业务,每个业务再去查找按照时间顺序排序的预约单,若由于业务没有合适的预约单而使得该业务未撮合完成的情况下,当有新的预约单被发布时,为了保证最先发布的预约单能够与最先发布的业务进行撮合,则仍需要从头开始遍历所有剩余的业务,并嵌套遍历所有预约单集合以使得按照时间排序后的每个业务依次与按照时间顺序排序的预约单进行撮合,这样,使得业务可能会被反复多次进行撮合,导致撮合的效率较差。
发明内容
本申请的目的旨在至少在一定程度上解决相关技术中的技术问题之一。
为此,本申请的第一个目的在于提出一种双向撮合方法。该方法减少了剩余的预约单、业务的遍历次数,降低了撮合算法的复杂度,并通过提高并发处理能力以提高了撮合效率。
本申请的第二个目的在于提出一种双向撮合装置。
本申请的第三个目的在于提出一种交易系统。
为达上述目的,本申请第一方面实施例的双向撮合方法,包括:对第一终端发布的所有业务数据信息设置业务撮合状态,并对第二终端发布的所有预约单数据信息设置预约单撮合状态;当检测到所述第一终端新发布的新业务数据信息时,将所述新业务数据信息与所述预约单撮合状态为第一预约单状态的预约单数据信息进行撮合处理,其中,所述第一预约单状态用于指示已经过撮合处理、且撮合未完成;当检测到所述第二终端新发布的新预约单数据信息时,将所述新预约单数据信息与所述业务撮合状态为第一业务状态的业务数据信息进行撮合处理,其中,所述第一业务状态用于指示已经过撮合处理、且撮合未完成。
本申请实施例的双向撮合方法,对业务数据信息设置业务撮合状态,并对预约单数据信息设置预约单撮合状态,当检测到存在新业务数据信息时,将新业务数据信息与已经过撮合处理、且撮合未完成的预约单数据信息进行撮合处理,并在检测到新预约单数据信息时,将新预约单数据信息与已经过撮合处理、且撮合未完成的业务数据信息进行撮合处理。即,通过对预约单数据信息、业务数据信息分别进行状态机的设计,分别将预约单数据信息分为新预约单数据信息和存量预约单数据信息,并将业务数据信息分为新业务数据信息和存量业务数据信息,最后,根据业务数据信息以及业务数据信息的撮合状态来实现新业务数据信息撮合存量预约单数据信息、新预约单数据信息撮合存量业务数据信息的双向撮合,与传统的单向撮合方式相比,减少了剩余的预约单、业务的遍历次数,降低了撮合算法的复杂度,并通过提高并发处理能力以提高了撮合效率。
为达上述目的,本申请第二方面实施例的双向撮合装置,包括:状态设置模块,用于对第一终端发布的所有业务数据信息设置业务撮合状态,并对第二终端发布的所有预约单数据信息设置预约单撮合状态;第一撮合模块,用于在检测到所述第一终端新发布的新业务数据信息时,将所述新业务数据信息与所述预约单撮合状态为第一预约单状态的预约单数据信息进行撮合处理,其中,所述第一预约单状态用于指示已经过撮合处理、且撮合未完成;第二撮合模块,用于在检测到所述第二终端新发布的新预约单数据信息时,将所述新预约单数据信息与所述业务撮合状态为第一业务状态的业务数据信息进行撮合处理,其中,所述第一业务状态用于指示已经过撮合处理、且撮合未完成。
本申请实施例的双向撮合装置,通过状态设置模块对业务数据信息设置业务撮合状态,并对预约单数据信息设置预约单撮合状态,第一撮合模块在检测到存在新业务数据信息时,将新业务数据信息与已经过撮合处理、且撮合未完成的预约单数据信息进行撮合处理,第二撮合模块在检测到新预约单数据信息时,将新预约单数据信息与已经过撮合处理、且撮合未完成的业务数据信息进行撮合处理。即,通过对预约单数据信息、业务数据信息分别进行状态机的设计,分别将预约单数据信息分为新预约单数据信息和存量预约单数据信息,并将业务数据信息分为新业务数据信息和存量业务数据信息,最后,根据业务数据信息以及业务数据信息的撮合状态来实现新业务数据信息撮合存量预约单数据信息、新预约单数据信息撮合存量业务数据信息的双向撮合,与传统的单向撮合方式相比,减少了剩余的预约单、业务的遍历次数,降低了撮合算法的复杂度,并通过提高并发处理能力以提高了撮合效率。
为达上述目的,本申请第三方面实施例的交易系统,包括本申请第二方面实施例的双向撮合装置。
本申请实施例的交易系统,通过双向撮合装置中的状态设置模块对业务数据信息设置业务撮合状态,并对预约单数据信息设置预约单撮合状态,第一撮合模块在检测到存在新业务数据信息时,将新业务数据信息与已经过撮合处理、且撮合未完成的预约单数据信息进行撮合处理,第二撮合模块在检测到新预约单数据信息时,将新预约单数据信息与已经过撮合处理、且撮合未完成的业务数据信息进行撮合处理。即,通过对预约单数据信息、业务数据信息分别进行状态机的设计,分别将预约单数据信息分为新预约单数据信息和存量预约单数据信息,并将业务数据信息分为新业务数据信息和存量业务数据信息,最后,根据业务数据信息以及业务数据信息的撮合状态来实现新业务数据信息撮合存量预约单数据信息、新预约单数据信息撮合存量业务数据信息的双向撮合,与传统的单向撮合方式相比,减少了剩余的预约单、业务的遍历次数,降低了撮合算法的复杂度,并通过提高并发处理能力以提高了撮合效率。
本申请附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本申请的实践了解到。
附图说明
本申请的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1是现有技术中在有新业务和新预约单产生时单向撮合方式进行撮合的示例图;
图2是根据本申请一个实施例的双向撮合方法的流程图;
图3是根据本申请另一个实施例的双向撮合方法的流程图;
图4(a)是根据本申请实施例的预约单数据信息的状态机的示例图;
图4(b)是根据本申请实施例的业务数据信息的状态机的示例图;
图5是根据本申请一个实施例的双向撮合方法的示例图;
图6是根据本申请一个实施例的双向撮合装置的结构框图;
图7是根据本申请另一个实施例的双向撮合装置的结构框图;
图8是根据本申请又一个实施例的双向撮合装置的结构框图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本申请,而不能理解为对本申请的限制。
目前,在常见的单向撮合的实现方案中,分别只有一个预约单池和一个业务池,可以理解,预约单池用于存储第二终端(如投资者终端)发布的预约单数据信息,业务池用于存储第一终端(如融资者终端)发布的业务数据信息。如图1所示,假设有新业务P6和新预约单A6产生,其中P6与预约单A2、A6匹配,为了保证时间优先的原则(如先创建的业务、预约单优先成交),只能通过单向撮合的方式进行撮合。假设通过业务找预约单的方式(如以P2A表示)撮合,那么,当有新发布的新业务时需要遍历一次预约单集合进行撮合;当有新发布的新预约单时需要在遍历业务集合中再嵌套遍历预约单集合进行撮合。然而,这种单向撮合方式会使得业务可能会被反复多次进行撮合,导致撮合的效率较差。
为此,为了解决在保证公平性的前提下撮合效率低等的问题,本申请提出了一种双向撮合方法、装置以及交易系统。本申请通过对预约单、业务进行状态标记,将预约单分为新预约单(即未经过撮合)和存量预约单(即已撮合过,未成交),将业务分为新业务(即未经过撮合)和存量业务(即已撮合过,未成交),并通过新业务撮合存量预约单和新预约单撮合存量业务的双向撮合方式,在保证公平性的前提下实现更高的撮合效率。具体地,下面参考附图描述本申请实施例的双向撮合方法、装置以及交易系统。
图2是根据本申请一个实施例的双向撮合方法的流程图。需要说明的是,本申请实施例的双向撮合方法可应用于具有时间优先需求的提供方、需求方双向撮合的撮合系统中,还可以应用于类似投资理财平台中投融资需求的撮合中。
为了更好地对本申请的描述及理解,下面以本申请实施例的双向撮合方法应用于投资理财平台中为例,对投资理财平台中的业务、预约单的撮合方式进行描述。
如图2所示,该双向撮合方法可以包括:
S210,对第一终端发布的所有业务数据信息设置业务撮合状态,并对第二终端发布的所有预约单数据信息设置预约单撮合状态。
其中,业务数据信息可理解为第一终端(如融资者终端)在投资理财平台上发布的需求数据信息(如融资需求),如融资金额、期限等;预约单数据信息可理解为第二终端(如投资者终端)在投资理财平台上发布的预约单数据需求,(如投资需求),以设置业务目标(包括预期收益率、期限、业务类型、金额等)用于购买符合条件的业务。
可以理解,投资理财平台可以接收第一终端发布的业务数据信息,并接收第二终端发布的预约单数据信息,并将接收到的业务数据信息和预约单数据信息进行存储,以为后续对业务数据信息和预约单数据信息的撮合提供数据依据。
需要说明的是,为了能够实现降低撮合算法复杂度,在本申请的实施例中,可为业务数据信息、预约单数据信息进行撮合状态标记,并根据当前业务数据信息、预约单数据信息的撮合情况对各自的撮合状态进行更新,以表示当前业务数据信息、预约单数据信息是新发布的,还是正在撮合处理的,还是撮合完成的,还是已经过撮合、且撮合未完成的状态。
作为一种示例,在本申请的实施例中,该业务撮合状态包括第一业务状态、第二业务状态、第三业务状态和第四业务状态,其中,第一业务状态可用于指示已经过撮合处理、且撮合未完成,第二业务状态可用于指示正在进行撮合处理,第三业务状态可用于指示撮合已完成,第四业务状态可用于未进行过撮合处理;预约单撮合状态可包括第一预约单状态、第二预约单状态和第三预约单状态,其中,第一预约单状态可用于指示已经过撮合处理、且撮合未完成,第二预约单状态可用于指示撮合已完成,第三预约单状态可用于指示未进行过撮合处理。
也就是说,针对新发布的业务数据信息,可为该新业务数据信息的撮合状态设置为第四业务状态,针对已经参与过撮合处理、但撮合未完成的业务数据信息,可为该业务数据信息的撮合状态设置为第一业务状态,针对已经参与过撮合处理、且撮合完成的业务数据信息,可为该业务数据信息的撮合状态设置为第三业务状态,针对正在进行撮合处理的业务数据信息,可为该业务数据信息的撮合状态设置为第二业务状态;同理,针对新发布的预约单数据信息,可为该新预约单数据信息的撮合状态设置为第三预约单状态,针对已经参与过撮合处理、但撮合未完成的预约单数据信息,可为该新预约单数据信息的撮合状态设置为第一预约单状态,针对已经参与过撮合处理、且撮合完成的预约单数据信息,可为该新预约单数据信息的撮合状态设置为第二预约单状态。由此,可根据业务数据信息和预约单数据信息的当前撮合情况来对其进行状态更新,以表示当前业务数据信息、预约单数据信息的撮合状态。
其中,上述撮合未完成的状态可以理解为用于表示业务数据信息与预约单数据信息不匹配而导致撮合不成功,或者,表示预约单数据信息与业务数据信息匹配、但业务数据信息中的可用库存不为零,此时,业务数据信息为撮合未完成的状态,该预约单数据信息为撮合完成状态。此外,业务数据信息的撮合完成状态可理解为业务数据信息与预约单数据信息匹配成功、且业务数据信息中的可用库存为零。
S220,当检测到第一终端新发布的新业务数据信息时,将新业务数据信息与预约单撮合状态为第一预约单状态的预约单数据信息进行撮合处理,其中,第一预约单状态用于指示已经过撮合处理、且撮合未完成。
作为一种示例,可从存储业务数据信息的数据库中检测该数据库中的所有业务数据信息中是否存在业务撮合状态为第四业务状态的业务数据信息,即是否存在未进行过撮合处理的业务数据信息,如果存在,则可确定第一终端新发布的新业务数据信息。
在检测到新业务数据信息时,可先将新业务数据信息的业务撮合状态更新为第二业务状态,并从存储预约单数据信息的数据库中确定预约单撮合状态为第一预约单状态的预约单数据信息,即确定已经过撮合处理、且撮合未完成的预约单数据信息(即存量预约单数据信息),之后,可将业务撮合状态更新后的新业务数据信息与该存量预约单数据信息进行撮合处理,也就是说,将业务撮合状态为第二业务状态的新业务数据信息与该存量预约单数据信息进行撮合处理。
也就是说,在检测到新业务数据信息时,可通过业务数据信息找预约单数据信息的撮合方式(如以P2A表示)来进行撮合处理,即,可将新业务数据信息与预约单撮合状态为第一预约单状态的预约单数据信息进行撮合处理。
S230,当检测到第二终端新发布的新预约单数据信息时,将新预约单数据信息与业务撮合状态为第一业务状态的业务数据信息进行撮合处理,其中,第一业务状态用于指示已经过撮合处理、且撮合未完成。
作为一种示例,可从存储预约单数据信息的数据库中检测该数据库中的所有预约单数据信息中是否存在预约单撮合状态为第三业务状态的预约单数据信息,即是否存在未进行过撮合处理的预约单数据信息,如果存在,则可确定第二终端新发布的新预约单数据信息。
在检测到新预约单数据信息时,可从存储业务数据信息的数据库中确定业务撮合状态为第一业务状态的业务数据信息,即确定已经过撮合处理、且撮合未完成的业务数据信息(即存量业务数据信息),之后,可将新预约单数据信息与该存量业务数据信息进行撮合处理。
也就是说,在检测到新预约单数据信息时,可通过预约单数据信息找业务数据信息的撮合方式(如以A2P表示)来进行撮合处理,即,可将新预约单数据信息与业务撮合状态为第一业务状态的业务数据信息进行撮合处理。
可以理解,本申请通过对业务数据信息和预约单数据信息进行状态标记,以区分业务数据信息和预约单数据信息的当前撮合状态,即将预约单数据信息分为新预约单数据信息(即未经过撮合)和存量预约单数据信息(即已撮合过,未成交),将业务数据信息分为新业务数据信息(即未经过撮合)和存量业务数据信息(即已撮合过,未成交)。当检测到新发布的新预约单数据信息时,根据撮合状态将新预约单数据信息与存量业务数据信息进行撮合处理,当检测新发布的新业务数据信息时,根据撮合状态将新业务数据信息与存量预约单数据信息进行撮合处理。
需要说明的是,上述步骤S220与步骤S230不存在先后执行顺序,也就是说,当检测到存在新业务数据信息时,执行步骤S220;当检测存在新预约单数据信息时,执行步骤S230。
为了保证双向撮合方式的可行性及可用性,进一步地,在本申请的一个实施例中,在进行撮合处理之后,如图3所示,在如图2所示的基础上,该方法还可包括:
S310,获取撮合结果,并根据撮合结果分别对参与本次撮合处理的业务数据信息的业务撮合状态和/或预约单数据信息的预约单撮合状态进行更新。
也就是说,在撮合处理之后,可根据撮合结果分别对当前参与本次撮合处理的业务数据信息以及预约单数据信息进行状态更新,以便用于下次的撮合。
具体而言,在本申请的实施例中,上述根据撮合结果分别对参与本次撮合处理的业务数据信息的业务撮合状态和/或预约单数据信息的预约单撮合状态进行更新的具体实现过程可包括:
当新业务数据信息与预约单撮合状态为第一预约单状态的预约单数据信息进行撮合处理、且撮合结果为撮合完成时,将撮合完成的新业务数据信息的业务撮合状态更新为第三业务状态,并将撮合完成的预约单数据信息的预约单撮合状态更新为第二预约单状态;
当新业务数据信息与预约单撮合状态为第一预约单状态的预约单数据信息进行撮合处理、且撮合结果为撮合未完成时,将撮合未完成的新业务数据信息的业务撮合状态更新为第一业务状态,并将撮合未完成的预约单数据信息的预约单撮合状态保持不变,即保持为第一预约单状态,以等待下次P2A撮合;
当新预约单数据信息与业务撮合状态为第一业务状态的业务数据信息进行撮合处理、且撮合结果为撮合完成时,将撮合完成的新预约单数据信息的预约单撮合状态更新为第二预约单状态,并将撮合完成的业务数据信息的业务撮合状态更新为第三业务状态;
当新预约单数据信息与业务撮合状态为第一业务状态的业务数据信息进行撮合处理、且撮合结果为撮合未完成时,将撮合未完成的新预约单数据信息的预约单撮合状态更新为第一预约单状态,并将撮合未完成的业务数据信息的业务撮合状态保持不变,即保持为第一业务状态,以等待下次A2P撮合。
为了使得本领域技术人员能够更加清楚地了解本申请,下面将举例说明。
如图4(a)所示,为预约单数据信息的状态机的示例图,其中,WAIT_MATCH表示第三预约单状态,MATCHING表示第一预约单状态,MATCHED表示第二预约单状态。如图4(b)所示,为业务数据信息的状态机的示例图,其中,WAIT_MATCH表示第四业务状态,MATCHING表示第二业务状态,WAIT_NEW_MATCH表示第一业务状态,MATCHED表示第三业务状态。
举例而言,如图5所示,投资理财平台可接收投资者新发布的预约单数据信息并进行存储,还可接收融资者新发布的业务数据信息并进行存储。当检测到存在新发布的新预约单数据信息或新业务数据信息时,可对这些新业务数据信息或新预约单数据信息进行撮合处理。当进行撮合处理时,可获取存储中的业务数据信息以及预约单数据信息,并分别确定这些业务数据信息以及预约单数据信息的当前撮合状态。具体地,当检测存在新发布的新业务数据信息,即存在状态为WAIT_MATCH的业务数据信息时,可将WAIT_MATCH状态的业务数据信息的状态更新为MATCHING(如图4(b)所示),并将MATCHING状态的业务数据信息与MATCHING状态的存量预约单数据信息(如图4(a)所示)进行撮合处理,以实现P2A的撮合方式。如果P2A撮合完成,则将预约单数据信息的撮合状态更新为MATCHED,将业务数据信息的撮合状态更新为MATCHE,如果P2A撮合未完成,则将业务数据信息的撮合状态更新为WAIT_NEW_MATCH,预约单数据信息的撮合状态停留在状态MATCHING以等待下次P2A撮合,如图4(a)、图4(b)所示。
当检测存在新发布的新预约单数据信息,即存在状态为WAIT_MATCH的预约单数据信息时,可将WAIT_MATCH状态的预约单数据信息与WAIT_NEW_MATCH状态的存量业务数据信息进行撮合处理,以实现A2P的撮合方式。如果A2P撮合完成,则将预约单数据信息的撮合状态更新为MATCHED,将业务数据信息的撮合状态更新为MATCHE,如果A2P撮合未完成,则将预约单数据信息的撮合状态更新为MATCHING,业务数据信息的撮合状态停留在WAIT_NEW_MATCH以等待下次A2P撮合,如图4(a)、图4(b)所示。
可以看出,根据如图4(a)、图4(b)所示的状态机,P2A撮合业务数据信息的撮合状态为MATCHING,根据撮合完成与否的结果会推进到WAIT_NEW_MATCH或者MATCHED;A2P撮合预约单数据信息的撮合状态为WAIT_MATCH,根据撮合完成与否的结果会推进到MATCHING或者MATCHED。
由于A2P撮合方式和P2A撮合方式同时进行,可能出现业务数据信息的撮合状态从MATCHING更新为WAIT_NEW_MATCH和预约单数据信息的撮合状态从WAIT_MATCH更新为MACTHING并发执行,这样会导致新发布的新预约单数据信息和新发布的新业务数据信息没有被撮合。
为了避免上述情况的发生,在本申请的一个实施例中,当检测到第一终端新发布的新业务数据信息、且第二终端新发布的新预约单数据信息,即同时存在新业务数据信息、以及新预约单数据信息时,可对业务撮合状态为第二业务状态的业务数据信息设置悲观锁,并将新预约单数据信息与业务撮合状态为第一业务状态的业务数据信息进行撮合处理,以推进预约单数据信息的撮合状态。这样,可以保证开始更新预约单数据信息的撮合状态之后、完成更新预约单数据信息的撮合状态之前,无法将业务数据信息的撮合状态从第二业务状态推进到第一业务状态。当出现预约单数据信息的撮合状态推进失败的情况则将此设置悲观锁的业务数据信息与该预约单数据信息再进行一次P2A撮合,即可解决此问题。
综上,本申请实施例的双向撮合方法采用的双向撮合的优势主要体现在以下几点:
(1)与传统的单向撮合方式相比,本申请的双向撮合只需要遍历存量预约单数据信息或存量业务数据信息,算法时间复杂度O(n),而单向撮合需要嵌套遍历所有的业务和所有的预约单,算法时间复杂度O(n^2),因此,降低了算法复杂度,提高了撮合性能;
(2)与传统的单向撮合方式相比,本申请的双向撮合通过提高并发处理能力来提高撮合效率。
本申请实施例的双向撮合方法,对业务数据信息设置业务撮合状态,并对预约单数据信息设置预约单撮合状态,当检测到存在新业务数据信息时,将新业务数据信息与已经过撮合处理、且撮合未完成的预约单数据信息进行撮合处理,并在检测到新预约单数据信息时,将新预约单数据信息与已经过撮合处理、且撮合未完成的业务数据信息进行撮合处理。即,通过对预约单数据信息、业务数据信息分别进行状态机的设计,分别将预约单数据信息分为新预约单数据信息和存量预约单数据信息,并将业务数据信息分为新业务数据信息和存量业务数据信息,最后,根据业务数据信息以及业务数据信息的撮合状态来实现新业务数据信息撮合存量预约单数据信息、新预约单数据信息撮合存量业务数据信息的双向撮合,与传统的单向撮合方式相比,减少了剩余的预约单、业务的遍历次数,降低了撮合算法的复杂度,并通过提高并发处理能力以提高了撮合效率。
需要说明的是,本申请实施例的双向撮合方法既可实施于定时撮合的方式,还可实施于实时撮合的方式中。
为了实现上述实施例,本申请还提出了一种双向撮合装置。
图6是根据本申请一个实施例的双向撮合装置的结构框图。如图6所示,该双向撮合装置可以包括:状态设置模块100、第一撮合模块200和第二撮合模块300。
其中,状态设置模块100可用于对第一终端发布的所有业务数据信息设置业务撮合状态,并对第二终端发布的所有预约单数据信息设置预约单撮合状态。
其中,业务数据信息可理解为第一终端(如融资者终端)在投资理财平台上发布的需求数据信息(如融资需求),如融资金额、期限等;预约单数据信息可理解为第二终端(如投资者终端)在投资理财平台上发布的预约单数据需求,(如投资需求),以设置业务目标(包括预期收益率、期限、业务类型、金额等)用于购买符合条件的业务。
可以理解,投资理财平台可以接收第一终端发布的业务数据信息,并接收第二终端发布的预约单数据信息,并将接收到的业务数据信息和预约单数据信息进行存储,以为后续对业务数据信息和预约单数据信息的撮合提供数据依据。
需要说明的是,为了能够实现降低撮合算法复杂度,在本申请的实施例中,可为业务数据信息、预约单数据信息进行撮合状态标记,并根据当前业务数据信息、预约单数据信息的撮合情况对各自的撮合状态进行更新,以表示当前业务数据信息、预约单数据信息是新发布的,还是正在撮合处理的,还是撮合完成的,还是已经过撮合、且撮合未完成的状态。
作为一种示例,在本申请的实施例中,该业务撮合状态包括第一业务状态、第二业务状态、第三业务状态和第四业务状态,其中,第一业务状态可用于指示已经过撮合处理、且撮合未完成,第二业务状态可用于指示正在进行撮合处理,第三业务状态可用于指示撮合已完成,第四业务状态可用于未进行过撮合处理;预约单撮合状态可包括第一预约单状态、第二预约单状态和第三预约单状态,其中,第一预约单状态可用于指示已经过撮合处理、且撮合未完成,第二预约单状态可用于指示撮合已完成,第三预约单状态可用于指示未进行过撮合处理。
也就是说,状态设置模块100针对新发布的业务数据信息,可为该新业务数据信息的撮合状态设置为第四业务状态,针对已经参与过撮合处理、但撮合未完成的业务数据信息,可为该业务数据信息的撮合状态设置为第一业务状态,针对已经参与过撮合处理、且撮合完成的业务数据信息,可为该业务数据信息的撮合状态设置为第三业务状态,针对正在进行撮合处理的业务数据信息,可为该业务数据信息的撮合状态设置为第二业务状态;同理,状态设置模块100针对新发布的预约单数据信息,可为该新预约单数据信息的撮合状态设置为第三预约单状态,针对已经参与过撮合处理、但撮合未完成的预约单数据信息,可为该新预约单数据信息的撮合状态设置为第一预约单状态,针对已经参与过撮合处理、且撮合完成的预约单数据信息,可为该新预约单数据信息的撮合状态设置为第二预约单状态。由此,可根据业务数据信息和预约单数据信息的当前撮合情况来对其进行状态更新,以表示当前业务数据信息、预约单数据信息的撮合状态。
其中,上述撮合未完成的状态可以理解为用于表示业务数据信息与预约单数据信息不匹配而导致撮合不成功,或者,表示预约单数据信息与业务数据信息匹配、但业务数据信息中的可用库存不为零,此时,业务数据信息为撮合未完成的状态,该预约单数据信息为撮合完成状态。
第一撮合模块200可用于在检测到第一终端新发布的新业务数据信息时,将新业务数据信息与预约单撮合状态为第一预约单状态的预约单数据信息进行撮合处理,其中,第一预约单状态用于指示已经过撮合处理、且撮合未完成。
作为一种示例,第一撮合模块200可从存储业务数据信息的数据库中检测该数据库中的所有业务数据信息中是否存在业务撮合状态为第四业务状态的业务数据信息,即是否存在未进行过撮合处理的业务数据信息,如果存在,则可确定第一终端新发布的新业务数据信息。
第一撮合模块200在检测到新业务数据信息时,可先将新业务数据信息的业务撮合状态更新为第二业务状态,并从存储预约单数据信息的数据库中确定预约单撮合状态为第一预约单状态的预约单数据信息,即确定已经过撮合处理、且撮合未完成的预约单数据信息(即存量预约单数据信息),之后,可将业务撮合状态更新后的新业务数据信息与该存量预约单数据信息进行撮合处理,也就是说,将业务撮合状态为第二业务状态的新业务数据信息与该存量预约单数据信息进行撮合处理。
也就是说,第一撮合模块200在检测到新业务数据信息时,可通过业务数据信息找预约单数据信息的撮合方式(如以P2A表示)来进行撮合处理,即,可将新业务数据信息与预约单撮合状态为第一预约单状态的预约单数据信息进行撮合处理。
第二撮合模块300可用于在检测到第二终端新发布的新预约单数据信息时,将新预约单数据信息与业务撮合状态为第一业务状态的业务数据信息进行撮合处理,其中,第一业务状态用于指示已经过撮合处理、且撮合未完成。
作为一种示例,第二撮合模块300可从存储预约单数据信息的数据库中检测该数据库中的所有预约单数据信息中是否存在预约单撮合状态为第三业务状态的预约单数据信息,即是否存在未进行过撮合处理的预约单数据信息,如果存在,则可确定第二终端新发布的新预约单数据信息。
第二撮合模块300在检测到新预约单数据信息时,可从存储业务数据信息的数据库中确定业务撮合状态为第一业务状态的业务数据信息,即确定已经过撮合处理、且撮合未完成的业务数据信息(即存量业务数据信息),之后,可将新预约单数据信息与该存量业务数据信息进行撮合处理。
也就是说,第二撮合模块300在检测到新预约单数据信息时,可通过预约单数据信息找业务数据信息的撮合方式(如以A2P表示)来进行撮合处理,即,可将新预约单数据信息与业务撮合状态为第一业务状态的业务数据信息进行撮合处理。
可以理解,本申请通过对业务数据信息和预约单数据信息进行状态标记,以区分业务数据信息和预约单数据信息的当前撮合状态,即将预约单数据信息分为新预约单数据信息(即未经过撮合)和存量预约单数据信息(即已撮合过,未成交),将业务数据信息分为新业务数据信息(即未经过撮合)和存量业务数据信息(即已撮合过,未成交)。当检测到新发布的新预约单数据信息时,根据撮合状态将新预约单数据信息与存量业务数据信息进行撮合处理,当检测新发布的新业务数据信息时,根据撮合状态将新业务数据信息与存量预约单数据信息进行撮合处理。
为了保证双向撮合方式的可行性及可用性,进一步地,在本申请的一个实施例中,如图7所示,在如图6所示的基础上,该装置还可包括:状态更新模块400。其中,状态更新模块400可用于获取撮合结果,并根据撮合结果分别对参与本次撮合处理的业务数据信息的业务撮合状态和/或预约单数据信息的预约单撮合状态进行更新。
具体而言,在本申请的实施例中,状态更新模块400根据撮合结果分别对参与本次撮合处理的业务数据信息的业务撮合状态和/或预约单数据信息的预约单撮合状态进行更新的具体实现过程可如下:
在新业务数据信息与预约单撮合状态为第一预约单状态的预约单数据信息进行撮合处理、且撮合结果为撮合完成时,将撮合完成的新业务数据信息的业务撮合状态更新为第三业务状态,并将撮合完成的预约单数据信息的预约单撮合状态更新为第二预约单状态;
在新业务数据信息与预约单撮合状态为第一预约单状态的预约单数据信息进行撮合处理、且撮合结果为撮合未完成时,将撮合未完成的新业务数据信息的业务撮合状态更新为第一业务状态,并将撮合未完成的预约单数据信息的预约单撮合状态保持不变,即保持为第一预约单状态,以等待下次P2A撮合;
在新预约单数据信息与业务撮合状态为第一业务状态的业务数据信息进行撮合处理、且撮合结果为撮合完成时,将撮合完成的新预约单数据信息的预约单撮合状态更新为第二预约单状态,并将撮合完成的业务数据信息的业务撮合状态更新为第三业务状态;
在新预约单数据信息与业务撮合状态为第一业务状态的业务数据信息进行撮合处理、且撮合结果为撮合未完成时,将撮合未完成的新预约单数据信息的预约单撮合状态更新为第一预约单状态,并将撮合未完成的业务数据信息的业务撮合状态保持不变,即保持为第一业务状态,以等待下次A2P撮合。
为了避免新发布的新预约单数据信息和新发布的新业务数据信息没有被撮合的情况的发生,在本申请的一个实施例中,如图8所示,该双向撮合装置还可包括:悲观锁设置模块500和状态推进模块600。
其中,悲观锁设置模块500可用于在检测到第一终端新发布的新业务数据信息、且第二终端新发布的新预约单数据信息时,对业务撮合状态为第二业务状态的业务数据信息设置悲观锁。
状态推进模块600可用于控制第二撮合模块300将新预约单数据信息与业务撮合状态为第一业务状态的业务数据信息进行撮合处理,以推进预约单数据信息的撮合状态。
也就是说,在检测到同时存在新业务数据信息、以及新预约单数据信息时,悲观锁设置模块500可对业务撮合状态为第二业务状态的业务数据信息设置悲观锁。状态推进模块600控制第二撮合模块300将新预约单数据信息与业务撮合状态为第一业务状态的业务数据信息进行撮合处理,以推进预约单数据信息的撮合状态。这样,可以保证开始更新预约单数据信息的撮合状态之后、完成更新预约单数据信息的撮合状态之前,无法将业务数据信息的撮合状态从第二业务状态推进到第一业务状态。当出现预约单数据信息的撮合状态推进失败的情况则将此设置悲观锁的业务数据信息与该预约单数据信息再进行一次P2A撮合,即可解决新发布的新预约单数据信息和新发布的新业务数据信息没有被撮合的问题。
本申请实施例的双向撮合装置,通过状态设置模块对业务数据信息设置业务撮合状态,并对预约单数据信息设置预约单撮合状态,第一撮合模块在检测到存在新业务数据信息时,将新业务数据信息与已经过撮合处理、且撮合未完成的预约单数据信息进行撮合处理,第二撮合模块在检测到新预约单数据信息时,将新预约单数据信息与已经过撮合处理、且撮合未完成的业务数据信息进行撮合处理。即,通过对预约单数据信息、业务数据信息分别进行状态机的设计,分别将预约单数据信息分为新预约单数据信息和存量预约单数据信息,并将业务数据信息分为新业务数据信息和存量业务数据信息,最后,根据业务数据信息以及业务数据信息的撮合状态来实现新业务数据信息撮合存量预约单数据信息、新预约单数据信息撮合存量业务数据信息的双向撮合,与传统的单向撮合方式相比,减少了剩余的预约单、业务的遍历次数,降低了撮合算法的复杂度,并通过提高并发处理能力以提高了撮合效率。
为了实现上述实施例,本申请还提出了一种交易系统,包括:本申请上述任一个实施例所述的双向撮合装置。
举例而言,交易系统中的接收模块可接收第一终端发布的业务数据信息,并接收第二终端发布的预约单数据信息;交易系统中的存储模块可将接收模块接收到的业务数据信息和预约单数据信息进行存储。
当检测到存在新发布的新预约单数据信息或新业务数据信息时,可对这些新业务数据信息或新预约单数据信息进行撮合处理。当进行撮合处理时,可通过双向撮合装置从存储模块中获取预约单数据信息以及业务数据信息,并分别确定预约单数据信息以及业务数据信息的当前撮合状态,最后,根据当前撮合状态对业务数据信息和预约单数据信息进程撮合处理。
当撮合结束后,如果有撮合成功的情况下,交易系统中的订单生成模块可获取通过双向撮合装置撮合成功的业务数据信息以及预约单数据信息,并根据撮合成功的业务数据信息以及预约单数据信息生成对应的订单信息。
交易系统中的提供模块将订单信息分别提供至第一终端和第二终端。交易系统中的交易控制模块在接收到第一终端和第二终端的确认指令时,对该订单信息进行交易控制,以完成该订单。
本申请实施例的交易系统,通过双向撮合装置中的状态设置模块对业务数据信息设置业务撮合状态,并对预约单数据信息设置预约单撮合状态,第一撮合模块在检测到存在新业务数据信息时,将新业务数据信息与已经过撮合处理、且撮合未完成的预约单数据信息进行撮合处理,第二撮合模块在检测到新预约单数据信息时,将新预约单数据信息与已经过撮合处理、且撮合未完成的业务数据信息进行撮合处理。即,通过对预约单数据信息、业务数据信息分别进行状态机的设计,分别将预约单数据信息分为新预约单数据信息和存量预约单数据信息,并将业务数据信息分为新业务数据信息和存量业务数据信息,最后,根据业务数据信息以及业务数据信息的撮合状态来实现新业务数据信息撮合存量预约单数据信息、新预约单数据信息撮合存量业务数据信息的双向撮合,与传统的单向撮合方式相比,减少了剩余的预约单、业务的遍历次数,降低了撮合算法的复杂度,并通过提高并发处理能力以提高了撮合效率。
在本申请的描述中,需要理解的是,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本申请的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本申请的实施例所属技术领域的技术人员所理解。
应当理解,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本申请各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。