CN113836184A - 一种业务持久化方法及装置 - Google Patents
一种业务持久化方法及装置 Download PDFInfo
- Publication number
- CN113836184A CN113836184A CN202111101807.0A CN202111101807A CN113836184A CN 113836184 A CN113836184 A CN 113836184A CN 202111101807 A CN202111101807 A CN 202111101807A CN 113836184 A CN113836184 A CN 113836184A
- Authority
- CN
- China
- Prior art keywords
- category
- service
- message
- persistence
- queues
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 230000002688 persistence Effects 0.000 title claims abstract description 156
- 238000000034 method Methods 0.000 title claims abstract description 73
- 238000012545 processing Methods 0.000 claims abstract description 176
- 230000008569 process Effects 0.000 claims description 10
- 238000012512 characterization method Methods 0.000 claims description 5
- 230000008030 elimination Effects 0.000 claims 2
- 238000003379 elimination reaction Methods 0.000 claims 2
- 238000010586 diagram Methods 0.000 description 23
- 238000004590 computer program Methods 0.000 description 12
- 230000003993 interaction Effects 0.000 description 10
- 230000002085 persistent effect Effects 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 230000000694 effects Effects 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 230000002045 lasting effect Effects 0.000 description 2
- 238000012806 monitoring device Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000001052 transient effect Effects 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供了一种业务持久化方法及装置,该方法包括:联机处理设备基于请求信息中需要入库的字段、表征类别的信息以及唯一标识请求信息的标识信息,生成对应的业务消息;联机处理设备将所述业务消息以及所述业务消息的类别对应的消息队列信息发送至消息队列设备;消息队列设备基于所述业务消息的类别对应的消息队列信息,将所述业务消息分配至对应类别的消息队列中;入库处理设备从多个类别的消息队列中,分别获取各类别的多个业务消息;其中,各类别的消息队列中缓存有对应类别的业务消息;入库处理设备针对获取的任一类别的多个业务消息,基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理。
Description
技术领域
本申请实施例涉及金融科技(Fintech)领域,尤其涉及一种业务持久化方法及装置。
背景技术
随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技转变,但由于金融行业的安全性、实时性要求,也对技术提出的更高的要求。在金融领域中,需要对业务进行持久化操作,也就是将瞬时数据转换为持久数据。
相关技术中,是在对每条业务进行数据处理后,直接将这条业务进行持久化操作。然而,上述方案对单条业务进行持久化操作效率较低。
综上,目前亟需一种业务持久化方法,用以提高持久化操作效率。
发明内容
本申请实施例提供了一种业务持久化方法及装置,用以提高持久化操作效率。
第一方面,本申请实施例提供了一种业务持久化方法,应用于持久化系统,所述持久化系统包括联机处理设备、消息队列设备以及入库处理设备;该方法包括:
所述联机处理设备基于请求信息中需要入库的字段、表征类别的信息以及唯一标识请求信息的标识信息,生成对应的业务消息;
所述联机处理设备将所述业务消息以及所述业务消息的类别对应的消息队列信息发送至消息队列设备;
所述消息队列设备基于所述业务消息的类别对应的消息队列信息,将所述业务消息分配至对应类别的消息队列中;
所述入库处理设备从多个类别的消息队列中,分别获取各类别的多个业务消息;其中,各类别的消息队列中缓存有对应类别的业务消息;
所述入库处理设备针对获取的任一类别的多个业务消息,基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理。
上述方案,以类别维度,消息队列设备将联机处理设备发送的业务消息分配至对应类别的消息队列中,进而入库处理设备获取各类别的多个业务消息,并采用该类别对应的持久化方式,对该类别的多个业务消息进行持久化处理,从而并行持久化处理多个类别的业务消息,提高了持久化操作效率和准确性;并且,通过消息队列缓存对应类别的业务消息,进而对于每个类别的多个业务消息批量进行持久化处理,将数据持久化与业务逻辑的处理解耦,提高了持久化响应速度,进一步提高持久化操作效率。
一些可选的实施方式中,基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理,包括:
通过所述类别对应的缓冲区的写入指针,按照所述缓冲区的缓冲位置顺序,将所述类别的业务消息依次写入缓冲区的缓冲位置;以及通过所述缓冲区的读取指针,按照所述缓冲区的缓冲位置顺序,依次读取通过所述写入指针写入的业务消息,并将读取的业务消息中需要入库的字段存入所述类别对应的存储位置。
上述方案,针对任一类别,按照该类别对应的缓冲区的缓冲位置顺序,通过写入指针将该类别的业务消息依次写入缓冲区的缓冲位置,通过读取指针依次读取业务消息,从而实现快速读取业务消息,进而将读取的业务消息中需要入库的字段存入该类别对应的存储位置,避免因死锁等问题影响持久化效率。
一些可选的实施方式中,还包括:
若所述写入指针与所述读取指针相邻,且在所述读取指针之后,则所述入库处理设备暂停通过所述写入指针将所述类别的业务消息写入所述缓冲区,并在所述写入指针与所述读取指针不相邻后,继续通过所述写入指针将所述类别的业务消息写入所述缓冲区;或者,
若所述读取指针与所述写入指针相邻,且在所述写入指针之后,则所述入库处理设备暂停通过所述读取指针读取业务消息,并在所述读取指针与所述写入指针不相邻后,继续通过所述读取指针读取业务消息。
上述方案,如果写入指针与读取指针相邻,且在读取指针之后,说明通过写入指针写入缓冲位置的已有的业务消息还没有被读取,这时暂停通过写入指针将该类别的业务消息写入缓冲区,即不再将需要写入的业务消息覆盖已有的业务消息,避免了该已有的业务消息的遗失;在写入指针与读取指针不相邻后,说明又通过读取指针读取了已有的业务消息,这时可以通过写入指针将该类别的业务消息写入缓冲区,即继续将需要写入的业务消息覆盖已被读取的已有的业务消息。如果读取指针与写入指针相邻,且在写入指针之后,说明已通过读取指针读取了所有写入的业务消息,这时已经没有写入的业务消息可被读取了,因此需要暂停通过读取指针读取业务消息;在读取指针与写入指针不相邻后,说明又通过写入指针写入了业务消息,这时可以通过读取指针继续读取新写入的业务消息。
一些可选的实施方式中,将所述类别的业务消息依次写入缓冲区的缓冲位置,包括:
若待写入的缓冲位置已有业务消息,则将需要写入的业务消息覆盖已有的业务消息。
上述方案,通过在待写入的缓冲位置有业务消息时,将需要写入的业务消息覆盖已有的业务消息,而不是删除已有的业务消息后将需要写入的业务消息写入到该缓冲位置,节约了回收无用内存空间的耗时,进一步提高了持久化操作效率。
一些可选的实施方式中,基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理之前,还包括:
所述入库处理设备将所述类别的多个业务消息的标识信息在远程字典服务(Remote Dictionary Server,Redis)中保存预设时长,基于Redis的数据去重算法对所述类别的多个业务消息进行去重处理。
上述方案,由于网络波动等因素,通常会导致短时间内业务消息重复,通过Redis的数据去重算法对预设时长内的业务消息进行去重处理,避免了将相同的业务消息重复持久化,且减少了保存业务消息的标识信息时间过长导致Redis内存被占满的情况发生。
一些可选的实施方式中,针对任一类别的消息队列,包括至少一个子队列;
任一类别的子队列的数量通过以下方式调整:
若所述类别的所有子队列缓存的业务消息的总数以及所述类别的子队列的数量之间的比值,大于第一比值,则增加所述类别的子队列;或者
若所述类别的所有子队列缓存的业务消息的总数以及所述类别的子队列的数量之间的比值,小于第二比值,且所述类别的子队列的数量大于预设数量,则减少所述类别的子队列;
其中,所述第一比值大于所述第二比值。
上述方案,如果某一类别的所有子队列缓存的业务消息的总数以及类别的子队列的数量之间的比值,大于较大的第一比值,说明该类别的所有子队列缓存的业务消息的总数较多,该类别的子队列的数量不能满足缓存需求,基于此,通过增加该类别的子队列,有更多子队列缓存该类别的业务消息,从而使该类别的子队列的数量满足缓存需求;如果某一类别的所有子队列缓存的业务消息的总数以及类别的子队列的数量之间的比值,小于较小的第一比值,说明该类别的所有子队列缓存的业务消息的总数较少,子队列较为空闲,在确定该类别的子队列的数量大于预设数量后,可以减少该类别的子队列。
一些可选的实施方式中,所述持久化系统还包括均衡负载器,且所述持久化系统中有多个联机处理设备;在联机处理设备基于请求信息中需要入库的字段、表征类别的信息以及唯一标识请求信息的标识信息,生成对应的业务消息之前,该方法包括:
所述均衡负载器基于顺序循环队列,从所有联机处理设备中顺序选择一个联机处理设备,并向选择的所述联机处理设备发送待处理信息;其中,所述待处理信息包括所述请求信息、所述表征类别的信息以及所述唯一标识请求信息的标识信息。
一些可选的实施方式中,所述方法还包括:
若有联机处理设备发生故障,则所述均衡负载器将故障的联机处理设备从所述顺序循环队列中去除。
第二方面,本申请实施例提供了一种业务持久化方法,应用于入库处理设备,该方法包括:
从多个类别的消息队列中,分别获取各类别的多个业务消息;其中,各类别的消息队列中缓存有对应类别的业务消息;
针对获取的任一类别的多个业务消息,基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理。
一些可选的实施方式中,基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理,包括:
通过所述类别对应的缓冲区的写入指针,按照所述缓冲区的缓冲位置顺序,将所述类别的业务消息依次写入缓冲区的缓冲位置;以及通过所述缓冲区的读取指针,按照所述缓冲区的缓冲位置顺序,依次读取通过所述写入指针写入的业务消息,并将读取的业务消息中需要入库的字段存入所述类别对应的存储位置。
一些可选的实施方式中,还包括:
若所述写入指针与所述读取指针相邻,且在所述读取指针之后,则暂停通过所述写入指针将所述类别的业务消息写入所述缓冲区,并在所述写入指针与所述读取指针不相邻后,继续通过所述写入指针将所述类别的业务消息写入所述缓冲区;或者,
若所述读取指针与所述写入指针相邻,且在所述写入指针之后,则暂停通过所述读取指针读取业务消息,并在所述读取指针与所述写入指针不相邻后,继续通过所述读取指针读取业务消息。
一些可选的实施方式中,将所述类别的业务消息依次写入缓冲区的缓冲位置,包括:
若待写入的缓冲位置已有业务消息,则将需要写入的业务消息覆盖已有的业务消息。
一些可选的实施方式中,基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理之前,还包括:
将所述类别的多个业务消息的标识信息在Redis中保存预设时长,基于Redis的数据去重算法对所述类别的多个业务消息进行去重处理。
一些可选的实施方式中,针对任一类别的消息队列,包括至少一个子队列;
任一类别的子队列的数量通过以下方式调整:
若所述类别的所有子队列缓存的业务消息的总数以及所述类别的子队列的数量之间的比值,大于第一比值,则增加所述类别的子队列;或者
若所述类别的所有子队列缓存的业务消息的总数以及所述类别的子队列的数量之间的比值,小于第二比值,且所述类别的子队列的数量大于预设数量,则减少所述类别的子队列;
其中,所述第一比值大于所述第二比值。
第三方面,本申请实施例还提供了一种业务持久化装置,包括:
业务消息获取模块,用于从多个类别的消息队列中,分别获取各类别的多个业务消息;其中,各类别的消息队列中缓存有对应类别的业务消息;
持久化模块,用于针对获取的任一类别的多个业务消息,基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理。
第四方面,本申请实施例还提供了一种持久化系统,包括联机处理设备、消息队列设备以及入库处理设备;其中:
所述联机处理设备,用于基于请求信息中需要入库的字段、表征类别的信息以及唯一标识请求信息的标识信息,生成对应的业务消息;
所述联机处理设备,还用于将所述业务消息以及所述业务消息的类别对应的消息队列信息发送至消息队列设备;
所述消息队列设备,用于基于所述业务消息的类别对应的消息队列信息,将所述业务消息分配至对应类别的消息队列中;
所述入库处理设备,用于从多个类别的消息队列中,分别获取各类别的多个业务消息;其中,各类别的消息队列中缓存有对应类别的业务消息;
所述入库处理设备,还用于针对获取的任一类别的多个业务消息,基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理。
第五方面,本申请实施例提供一种入库处理设备,包括至少一个处理器以及至少一个存储器,其中,所述存储器存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行上述第二方面任一所述的业务持久化方法。
第六方面,本申请实施例提供一种计算机可读存储介质,其存储有可由计算设备执行的计算机程序,当所述程序在所述计算设备上运行时,使得所述计算设备执行上述第二方面任一所述的业务持久化方法。
另外,第二方面至第六方面中任一种实现方式所带来的技术效果可参见第一方面中不同实现方式所带来的技术效果,此处不再赘述。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的第一种持久化系统架构图;
图2为本申请实施例提供的第一种业务持久化方法的交互流程图;
图3为本申请实施例提供的第一种消息队列示意图;
图4为本申请实施例提供的第二种消息队列示意图;
图5为本申请实施例提供的第三种消息队列示意图;
图6为本申请实施例提供的第二种持久化系统架构图;
图7为本申请实施例提供的第二种业务持久化方法的交互流程图;
图8为本申请实施例提供的缓冲区示意图;
图9为本申请实施例提供的第一种读取指针以及写入指针的位置示意图;
图10为本申请实施例提供的第二种读取指针以及写入指针的位置示意图;
图11为本申请实施例提供的第三种业务持久化方法的交互流程图;
图12为本申请实施例提供的第三种持久化系统架构图;
图13为本申请实施例提供的第四种业务持久化方法的交互流程图;
图14为本申请实施例提供的一种业务持久化方法的流程示意图;
图15为本申请实施例提供的一种业务持久化装置的结构示意图;
图16为本申请实施例提供的入库处理设备的结构示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,显然,所描述的实施例仅仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在金融领域中,需要对业务进行持久化操作,也就是将瞬时数据转换为持久数据。
一些实施例中,是在对每条业务消息进行数据处理后,直接将这条业务消息进行持久化操作,即将该业务消息中的部分字段存入到数据库中。
然而,在短时间内产生大量业务消息的场景中,需要花费大量时间对每条业务进行持久化,导致整个处理流程效率较低,且需要在每条业务中耦合与业务处理无关的持久化逻辑。
鉴于此,本申请实施例提出一种业务持久化方法及装置,该方法应用于入库处理设备,包括:从多个类别的消息队列中,分别获取各类别的多个业务消息;其中,各类别的消息队列中缓存有对应类别的业务消息;针对获取的任一类别的多个业务消息,基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理。该方法以类别维度,获取各类别的多个业务消息,并采用该类别对应的持久化方式,对该类别的多个业务消息进行持久化处理,从而并行持久化处理多个类别的业务消息,提高了持久化操作效率和准确性;并且,通过消息队列缓存对应类别的业务消息,进而对于每个类别的多个业务消息批量进行持久化处理,将数据持久化与业务逻辑的处理解耦,提高了持久化响应速度,进一步提高持久化操作效率。
参阅图1所示,为本申请实施例提供的第一种持久化系统架构图,持久化系统10包括:联机处理设备100、消息队列设备200以及入库处理设备300。
联机处理设备100,用于基于请求信息中需要入库的字段、表征类别的信息以及唯一标识请求信息的标识信息,生成对应的业务消息;
联机处理设备100,还用于将所述业务消息以及所述业务消息的类别对应的消息队列信息发送至消息队列设备200;
消息队列设备200,用于基于所述业务消息的类别对应的消息队列信息,将所述业务消息分配至对应类别的消息队列中,即消息队列设备200设置有多个类别的消息队列,各类别的消息队列中缓存有对应类别的业务消息;
入库处理设备300,用于从多个类别的消息队列中,分别获取各类别的多个业务消息;针对获取的任一类别的多个业务消息,基于该类别对应的持久化方式,对该类别的多个业务消息批量进行持久化处理。
上述持久化系统只是示例性说明,本申请实施例并限于上述持久化系统。
下面将结合附图及具体实施例,对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。
图2为本申请实施例提供的第一种业务持久化方法的交互流程图,如图2所示,包括以下步骤:
步骤S201:联机处理设备基于请求信息中需要入库的字段、表征类别的信息以及唯一标识请求信息的标识信息,生成对应的业务消息。
上述业务消息是联机处理设备基于请求信息中需要入库的字段、表征类别的信息以及唯一标识请求信息的标识信息生成的。
实施中,不同类别的请求信息,需要入库的字段是不同的,例如类别A的请求信息中流水号、客户号、客户名称、交易时间、相应信息以及错误信息这些字段为需要入库的字段,类别B的请求信息中流水号、客户号、客户名称、交易时间、相应码以及错误信息这些字段为需要入库的字段。该不同类别的请求信息中需要入库的字段只是示例性说明,本申请对此不做具体限定。
一些可选的实现方式中,可在请求信息中需要入库的字段中添加注解,该注解表征了对应字段需要入库,便于联机处理设备基于注解确定请求信息中需要入库的字段。
上述标识信息可以唯一标识请求信息,由于在分布式场景下,采用自增方式生成的流水号生成可能会重复,因此可以基于请求信息中的部分信息生成标识信息,例如将请求信息中渠道号、系统号、机房id、工作机器id、时间戳以及序号,组合为上述标识信息。
联机处理设备可通过但不限于如下方式生成对应的业务消息:
基于上述注解确定请求信息中需要入库的字段,并将这些需要入库的字段对应的特征值、表征类别的特征值以及表征标识的特征值,生成json格式(一种轻量级的数据交换格式)的业务消息。
步骤S202:联机处理设备将所述业务消息以及所述业务消息的类别对应的消息队列信息发送至消息队列设备。
联机处理设备可通过但不限于如下方式将业务消息及其类别对应的消息队列信息发送至消息队列设备:
将上述json格式的业务消息及其类别对应的消息队列信息,作为消息队列的消息主体(messagebody)发送至消息队列设备。
步骤S203:消息队列设备将所述业务消息分配至对应类别的消息队列中。
参阅图3所示,为本实施例提供的一种消息队列示意图,消息队列设备配置有五个类别的消息队列,其中,类别A的消息队列用于缓存类别A的业务消息;类别B的消息队列用于缓存类别B的业务消息;类别C的消息队列用于缓存类别C的业务消息;类别D的消息队列用于缓存类别D的业务消息;类别E的消息队列用于缓存类别E的业务消息。
实施中,各类别的消息队列中缓存的业务消息均在消息存储文件(commitlog)中保存,避免业务消息的丢失。
图3只是对消息队列的示例性说明,实际应用中可能设置有更多或更少的消息队列。
步骤S204:入库处理设备从多个类别的消息队列中,分别获取各类别的多个业务消息。
示例性的,通过在入库处理设备内继承消息队列的业务消息监听器,获取各类别的多个业务消息。
入库处理设备获取各类别的多个业务消息可通过但不限于如下方式实现:
1)入库处理设备接收各类别的消息队列主动推挤(Push)的多个业务消息;
2)入库处理设备从各类别的消息队列中拉取(Pull)多个业务消息。
上述两种获取方式只是示例性说明,本申请并不以此为限。
步骤S205:针对获取的任一类别的多个业务消息,入库处理设备基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理。
本实施例,是以类别维度,进行持久化处理,从而并行持久化处理多个类别的业务消息;并且,对于每个类别的多个业务消息批量进行持久化处理,提高了持久化操作效率。
还是以上述类别A~E为例,以下步骤可以并列执行:
基于类别A对应的持久化方式,将获取的类别A的多个业务消息,进行持久化处理;
基于类别B对应的持久化方式,将获取的类别B的多个业务消息,进行持久化处理;
基于类别C对应的持久化方式,将获取的类别C的多个业务消息,进行持久化处理;
基于类别D对应的持久化方式,将获取的类别D的多个业务消息,进行持久化处理;
基于类别E对应的持久化方式,将获取的类别E的多个业务消息,进行持久化处理。
上述持久化处理过程只是示例性说明,本申请对此不做具体限定。
上述技术方案中,以类别维度,消息队列设备将联机处理设备发送的业务消息分配至对应类别的消息队列中,进而入库处理设备获取各类别的多个业务消息,并采用该类别对应的持久化方式,对该类别的多个业务消息进行持久化处理,从而并行持久化处理多个类别的业务消息,提高了持久化操作效率和准确性;并且,通过消息队列缓存对应类别的业务消息,进而对于每个类别的多个业务消息批量进行持久化处理,将数据持久化与业务逻辑的处理解耦,提高了持久化响应速度,进一步提高持久化操作效率。
在实际应用中,一段时间内生成的各类别的业务消息的数量不同,因此不同类别的消息队列缓存的业务消息的数量不同。基于此,图4为本实施例提供的另一种消息队列示意图,针对任一类别的消息队列,包括至少一个子队列,某一类别的子队列的数量根据该类别的所有子队列缓存的业务消息的总数调整。参阅图4所示,类别A的消息队列包括子队列A1以及子队列A2;类别B的消息队列包括子队列B1、子队列B2以及子队列B3;类别C的消息队列包括子队列C1;类别D的消息队列包括子队列D1以及子队列D2;类别E的消息队列包括子队列E1、子队列E2以及子队列E3。
一些可选的实施方式中,任一类别的子队列的数量通过以下方式调整:
若所述类别的所有子队列缓存的业务消息的总数以及所述类别的子队列的数量之间的比值,大于第一比值,则增加所述类别的子队列;或者
若所述类别的所有子队列缓存的业务消息的总数以及所述类别的子队列的数量之间的比值,小于第二比值,且所述类别的子队列的数量大于预设数量,则减少所述类别的子队列;
其中,所述第一比值大于所述第二比值。
上述第一比值大于第二比值,即第一比值相较于第二比值为较大的比值。
如果某一类别的所有子队列缓存的业务消息的总数以及类别的子队列的数量之间的比值,大于较大的第一比值,说明该类别的所有子队列缓存的业务消息的总数较多,该类别的子队列的数量不能满足缓存需求,基于此,通过增加该类别的子队列,有更多子队列缓存该类别的业务消息,从而使该类别的子队列的数量满足缓存需求;
反之,如果某一类别的所有子队列缓存的业务消息的总数以及类别的子队列的数量之间的比值,小于较小的第一比值,说明该类别的所有子队列缓存的业务消息的总数较少,子队列较为空闲,在确定该类别的子队列的数量大于预设数量后,可以减少该类别的子队列。
上述减少某一类别的子队列可通过但不限于以下方式实现:
1)从该类别的所有子队列中随机选择一个子队列,将选择的子队列中缓存的业务消息分配至该类别的其他子队列中,进而删除选择的子队列;
2)从该类别的所有子队列中确定缓存业务消息最少的子队列,将该缓存业务消息最少的子队列中缓存的业务消息分配至该类别的其他子队列中,进而删除该缓存业务消息最少的子队列。
上述两种减少某一类别的子队列的方式只是示例性说明,本申请并不以此为限。
上述预设数量可以根据实际应用场景设定,一些实施例中,预设数量可以为1,也就是说不能将某一类别的子队列的数量减少到0,以保证各类别至少有一个子队列。
还是以图4为例,第一比值记作R0,第二比值记作R0′,预设数量为1,通过以下方式调整子队列的数量:
类别A的所有子队列缓存的业务消息的总数以及类别A的子队列的数量之间的比值记作R1,R1>R0,增加类别A的子队列A3;
类别B的所有子队列缓存的业务消息的总数以及类别B的子队列的数量之间的比值记作R2,R2<R0′,将子队列B3中缓存的业务消息分配至子队列B1和/或子队列B2中,并删除子队列B3;
类别C的所有子队列缓存的业务消息的总数以及类别C的子队列的数量之间的比值记作R3,R3<R0′,但类别C的子队列的数量为1,不大于预设数量(等于预设数量),无需调整类别C的子队列的数量;
类别D的所有子队列缓存的业务消息的总数以及类别D的子队列的数量之间的比值记作R4,R4既不大于R0,也不小于R0′,无需调整类别D的子队列的数量;
类别E的所有子队列缓存的业务消息的总数以及类别E的子队列的数量之间的比值记作R5,同样的,R5既不大于R0,也不小于R0′,无需调整类别E的子队列的数量。
调整子队列后的消息队列可参阅图5所示,类别A的消息队列包括子队列A1、子队列A2以及子队列A3;类别B的消息队列包括子队列B1以及子队列B2;类别C的消息队列包括子队列C1;类别D的消息队列包括子队列D1以及子队列D2;类别E的消息队列包括子队列E1、子队列E2以及子队列E3。
上述示例只是一种可能的调整子队列的数量的方式,本申请并不以此为限。
参阅图6所示,为本实施例提供的第二种持久化系统架构图,在图1所示的持久化系统10的基础上,持久化系统20还包括监控设备400,上述调整任一类别的子队列的数量可由监控设备400执行。
此外,监控设备还可以对入库处理设备在单位时间内获取的业务消息的第一数量以及联机处理设备向消息队列设备发送的业务消息的第二数量进行比对,根据比对结果进行预警。
示例性的,如果第一数量小于第二数量,且第二数量相较于第一数量的偏差大于预设偏差,说明联机处理设备的向消息队列设备发送业务消息的速度,要远大于入库处理设备获取业务消息的速度,会导致消息队列设备中commitlog存储空间不足,可通过邮件、短信、电话等方式,通知相关运维人员及时监控并调整入库处理设备的处理能力。
图7为本申请实施例提供的第二种业务持久化方法的交互流程图,如图7所示,包括以下步骤:
步骤S701:联机处理设备基于请求信息中需要入库的字段、表征类别的信息以及唯一标识请求信息的标识信息,生成对应的业务消息。
步骤S702:联机处理设备将所述业务消息以及所述业务消息的类别对应的消息队列信息发送至消息队列设备。
步骤S703:消息队列设备将所述业务消息分配至对应类别的消息队列中。
步骤S704:入库处理设备从多个类别的消息队列中,分别获取各类别的多个业务消息。
该步骤S701~S704的具体实现方式可参照上述实施例,此处不再赘述。
步骤S705:针对获取的任一类别的多个业务消息,入库处理设备通过所述类别对应的缓冲区的写入指针,按照所述缓冲区的缓冲位置顺序,将所述类别的业务消息依次写入缓冲区的缓冲位置;以及通过所述缓冲区的读取指针,按照所述缓冲区的缓冲位置顺序,依次读取通过所述写入指针写入的业务消息,并将读取的业务消息中需要入库的字段存入所述类别对应的存储位置。
本实施例,需要对一个类别的多个业务消息批量进行持久化处理。如果采用并发包中的队列的方式来收集到一定量的业务消息后再存入该类别对应的存储位置,在获取的该类别的业务消息较多时,无法及时将所有业务消息存入,可能导致内存不足等问题。如果通过加锁的缓冲队列的方式进行持久化处理,可能会出现死锁等问题,而影响持久化效率。
基于此,本实施例,针对任一类别,按照该类别对应的缓冲区的缓冲位置顺序,通过写入指针将该类别的业务消息依次写入缓冲区的缓冲位置,通过读取指针依次读取业务消息。从而实现快速读取业务消息,进而将读取的业务消息中需要入库的字段存入该类别对应的存储位置。
参阅图8所示,类别A对应的缓冲区缓冲位置有8个,按照缓冲位置顺序分别记作缓冲位置1、缓冲位置2、缓冲位置3、缓冲位置4、缓冲位置5、缓冲位置6、缓冲位置7以及缓冲位置8;通过写入指针将类别A的100个业务消息(分别记作业务消息1、业务消息2、业务消息3、……业务消息99、业务消息100)分别写入缓冲位置1~8。
图8是对缓冲区的示例性说明,实际应用中缓冲区可以设置更多或更少的缓冲位置,本申请对此不做具体限定。
一些实施例中,出于性能考虑,缓冲区缓冲位置的数量可以设置为2n。
实施中,某一类别的业务消息的数量可能大于缓冲位置的数量,如上述实施例,缓存区只有8个缓冲位置,类别A有100个业务消息,显然不能只写满一次缓冲区的缓冲位置,就完成所有业务消息的写入和读取。
基于此,如果待写入的缓冲位置没有业务消息,直接将需要写入的业务消息写入到该缓冲位置;
如果待写入的缓冲位置有业务消息,将需要写入的业务消息覆盖已有的业务消息。
通过在待写入的缓冲位置有业务消息时,将需要写入的业务消息覆盖已有的业务消息,而不是删除已有的业务消息后将需要写入的业务消息写入到该缓冲位置,节约了回收无用内存空间的耗时,进一步提高了持久化操作效率。
还是以上述图8为例,直接将业务消息1写入缓冲位置1;将业务消息2写入缓冲位置2;将业务消息3写入缓冲位置3;将业务消息4写入缓冲位置4;将业务消息5写入缓冲位置5;将业务消息6写入缓冲位置6;将业务消息7写入缓冲位置7;将业务消息8写入缓冲位置8;
将业务消息9覆盖缓冲位置1中的业务消息1;将业务消息10覆盖缓冲位置2中的业务消息2;将业务消息11覆盖缓冲位置3中的业务消息3;将业务消息12覆盖缓冲位置4中的业务消息4;将业务消息13覆盖缓冲位置5中的业务消息5;将业务消息14覆盖缓冲位置6中的业务消息6;将业务消息15覆盖缓冲位置7中的业务消息7;将业务消息16覆盖缓冲位置8中的业务消息8;
将业务消息97覆盖缓冲位置1中的业务消息89;将业务消息98覆盖缓冲位置2中的业务消息90;将业务消息99覆盖缓冲位置3中的业务消息91;将业务消息100覆盖缓冲位置4中的业务消息92。
上述示例是写入业务消息的一种可行的实现方式,本申请并不以此为限。
如上所述,某一类别的业务消息的数量可能大于缓冲位置的数量,在待写入的缓冲位置有业务消息时,将需要写入的业务消息覆盖已有的业务消息。如果已有的业务消息在没被读取之前,就被需要写入的业务消息覆盖了,就会造成该已有的业务消息的遗失,不能将其存入对应的存储位置,对该已有的业务消息持久化失败。因此,在覆盖已有的业务消息之前,需要确定该已有的业务消息已被读取。
一些可选的实施方式中,如果写入指针与读取指针相邻,且在读取指针之后,说明通过写入指针写入缓冲位置的已有的业务消息还没有被读取,这时暂停通过写入指针将该类别的业务消息写入缓冲区,即不再将需要写入的业务消息覆盖已有的业务消息,避免了该已有的业务消息的遗失;
进一步的,在写入指针与读取指针不相邻后,说明又通过读取指针读取了已有的业务消息,这时可以通过写入指针将该类别的业务消息写入缓冲区,即继续将需要写入的业务消息覆盖已被读取的已有的业务消息。
一些可选的实施方式中,如果读取指针与写入指针相邻,且在写入指针之后,说明已通过读取指针读取了所有写入的业务消息,这时已经没有写入的业务消息可被读取了,因此需要暂停通过读取指针读取业务消息;
进一步的,在读取指针与写入指针不相邻后,说明又通过写入指针写入了业务消息,这时可以通过读取指针继续读取新写入的业务消息。
参阅图9所示,写入指针在缓冲位置4,读取指针在缓冲位置5,通过写入指针写入的缓冲位置1~8的业务消息都没有被读取,这时暂停通过写入指针将该类别的业务消息写入缓冲区;读取指针读取缓冲位置5的业务消息之后,转到缓冲位置6,可以通过写入指针转到缓冲位置5,将业务消息写入缓冲位置5。
参阅图10所示,写入指针在缓冲位置5,读取指针在缓冲位置4,已通过读取指针读取了所有写入的业务消息,这时暂停通过读取指针读取业务消息;写入指针在缓冲位置5写入业务消息之后,转到缓冲位置6,可以通过读取指针转到缓冲位置5,读取缓冲位置5的业务消息。
上述示例只是为了更清楚地说明如何暂停通过读取指针读取业务消息、继续通过读取指针读取业务消息、暂停通过写入指针写入业务消息以及继续通过写入指针写入业务消息,本申请并不以此为限。
上述技术方案中,针对任一类别,按照该类别对应的缓冲区的缓冲位置顺序,通过写入指针将该类别的业务消息依次写入缓冲区的缓冲位置,通过读取指针依次读取业务消息。从而实现快速读取业务消息,进而将读取的业务消息中需要入库的字段存入该类别对应的存储位置,避免因死锁等问题影响持久化效率。
图11为本申请实施例提供的第三种业务持久化方法的交互流程图,如图11所示,包括以下步骤:
步骤S1101:联机处理设备基于请求信息中需要入库的字段、表征类别的信息以及唯一标识请求信息的标识信息,生成对应的业务消息。
步骤S1102:联机处理设备将所述业务消息以及所述业务消息的类别对应的消息队列信息发送至消息队列设备。
步骤S1103:消息队列设备将所述业务消息分配至对应类别的消息队列中。
步骤S1104:入库处理设备从多个类别的消息队列中,分别获取各类别的多个业务消息。
该步骤S1101~S1104的具体实现方式可参照上述实施例,此处不再赘述。
步骤S1105:针对获取的任一类别的多个业务消息,入库处理设备将所述类别的多个业务消息的标识信息在Redis中保存预设时长,基于Redis的数据去重算法对所述类别的多个业务消息进行去重处理。
由于网络波动等因素,可能会导致业务消息重复的情况发生,因此,可以对获取的各类别的多个业务消息进行去重处理。
示例性的,入库处理设备将能够唯一标识业务消息的标识信息保存到Redis中,利用Redis的数据去重算法来去重。由于网络波动等因素,通常会导致短时间内业务消息重复,基于此,可以预设该标识信息的过期时长,在Redis保存该标识信息的时长超过上述过期时长后,删除该标识信息,防止Redis内存被占满。本实施例对过期时间不做具体限定,例如为120s、100s或者110s等等。
一些可选的实施方式中,为了保证去重效果,入库处理设备将能够唯一标识业务消息的标识信息发送给该业务消息对应的请求方,请求方在收到相同的标识信息后通知入库处理设备。
步骤S1106:入库处理设备基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理。
该步骤S1106的具体实现方式可参照上述实施例,此处不再赘述。
上述技术方案中,通过对业务消息进行去重处理,避免了将相同的业务消息重复持久化。
参阅图12所示,为本实施例提供的第三种持久化系统架构图,在图1所示的持久化系统10的基础上,持久化系统30还包括均衡负载器500,且该持久化系统30中有多个联机处理设备,图12以联机处理设备101、联机处理设备102以及联机处理设备103为例,实际应用中可以有更多或更少的联机处理设备。
图13为本申请实施例提供的第四种业务持久化方法的交互流程图,应用于图12所示的持久化系统,如图13所示,包括以下步骤:
步骤S1301:均衡负载器基于顺序循环队列,从所有联机处理设备中顺序选择一个联机处理设备。
步骤S1302:均衡负载器向选择的联机处理设备发送待处理信息。
其中,所述待处理信息包括所述请求信息、所述表征类别的信息以及所述唯一标识请求信息的标识信息。
实施中,可以有多个联机处理设备,以便提高处理效率。通过均衡负载器(如F5均衡负载器),基于顺序循环队列顺序选择一个联机处理设备。将待处理信息(包括上述请求信息、表征类别的信息以及唯一标识请求信息的标识信息),顺序循环地发送至选择的联机处理设备。
由于联机处理设备在发生故障时无法生成业务消息,基于此,在一些可选的实施方式中,若有联机处理设备发生故障,则所述均衡负载器将故障的联机处理设备从所述顺序循环队列中去除。
示例性的,当有联机处理设备发生第二层到第七层故障时,均衡负载器就将其从顺序循环队列中去除,不参加下一次轮询,即不向该故障的联机处理设备发送待处理信息,直至联机处理设备恢复正常。
步骤S1303:联机处理设备基于请求信息中需要入库的字段、表征类别的信息以及唯一标识请求信息的标识信息,生成对应的业务消息。
步骤S1304:联机处理设备将所述业务消息以及所述业务消息的类别对应的消息队列信息发送至消息队列设备。
步骤S1305:消息队列设备将所述业务消息分配至对应类别的消息队列中。
步骤S1306:入库处理设备从多个类别的消息队列中,分别获取各类别的多个业务消息。
步骤S1307:针对获取的任一类别的多个业务消息,入库处理设备基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理。
该步骤S1303~1307的具体实现方式可参照上述实施例,此处不再赘述。
在本申请实施例中,入库处理设备执行的业务持久化方法如图14所示,包括如下步骤:
步骤S1401:从多个类别的消息队列中,分别获取各类别的多个业务消息;其中,各类别的消息队列中缓存有对应类别的业务消息;
步骤S1402:针对获取的任一类别的多个业务消息,基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理。
一些可选的实施方式中,基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理,包括:
通过所述类别对应的缓冲区的写入指针,按照所述缓冲区的缓冲位置顺序,将所述类别的业务消息依次写入缓冲区的缓冲位置;以及通过所述缓冲区的读取指针,按照所述缓冲区的缓冲位置顺序,依次读取通过所述写入指针写入的业务消息,并将读取的业务消息中需要入库的字段存入所述类别对应的存储位置。
一些可选的实施方式中,还包括:
若所述写入指针与所述读取指针相邻,且在所述读取指针之后,则暂停通过所述写入指针将所述类别的业务消息写入所述缓冲区,并在所述写入指针与所述读取指针不相邻后,继续通过所述写入指针将所述类别的业务消息写入所述缓冲区;或者,
若所述读取指针与所述写入指针相邻,且在所述写入指针之后,则暂停通过所述读取指针读取业务消息,并在所述读取指针与所述写入指针不相邻后,继续通过所述读取指针读取业务消息。
一些可选的实施方式中,将所述类别的业务消息依次写入缓冲区的缓冲位置,包括:
若待写入的缓冲位置已有业务消息,则将需要写入的业务消息覆盖已有的业务消息。
一些可选的实施方式中,基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理之前,还包括:
将所述类别的多个业务消息的标识信息在Redis中保存预设时长,基于Redis的数据去重算法对所述类别的多个业务消息进行去重处理。
一些可选的实施方式中,针对任一类别的消息队列,包括至少一个子队列;
任一类别的子队列的数量通过以下方式调整:
若所述类别的所有子队列缓存的业务消息的总数以及所述类别的子队列的数量之间的比值,大于第一比值,则增加所述类别的子队列;或者
若所述类别的所有子队列缓存的业务消息的总数以及所述类别的子队列的数量之间的比值,小于第二比值,且所述类别的子队列的数量大于预设数量,则减少所述类别的子队列;
其中,所述第一比值大于所述第二比值。
图14实施例的具体实现方式可以参见上述交互方法的实施,重复之处不再赘述。
如图15所示,基于与图14所示的业务持久化方法相同的发明构思,本申请实施例提供第一种业务持久化装置1500,包括:
业务消息获取模块1501,用于从多个类别的消息队列中,分别获取各类别的多个业务消息;其中,各类别的消息队列中缓存有对应类别的业务消息;
持久化模块1502,用于针对获取的任一类别的多个业务消息,基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理。
一些可选的实施方式中,持久化模块1502,具体用于:
通过所述类别对应的缓冲区的写入指针,按照所述缓冲区的缓冲位置顺序,将所述类别的业务消息依次写入缓冲区的缓冲位置;以及通过所述缓冲区的读取指针,按照所述缓冲区的缓冲位置顺序,依次读取通过所述写入指针写入的业务消息,并将读取的业务消息中需要入库的字段存入所述类别对应的存储位置。
一些可选的实施方式中,持久化模块1502,还用于:
若所述写入指针与所述读取指针相邻,且在所述读取指针之后,则暂停通过所述写入指针将所述类别的业务消息写入所述缓冲区,并在所述写入指针与所述读取指针不相邻后,继续通过所述写入指针将所述类别的业务消息写入所述缓冲区;或者,
若所述读取指针与所述写入指针相邻,且在所述写入指针之后,则暂停通过所述读取指针读取业务消息,并在所述读取指针与所述写入指针不相邻后,继续通过所述读取指针读取业务消息。
一些可选的实施方式中,持久化模块1502,具体用于:
若待写入的缓冲位置已有业务消息,则将需要写入的业务消息覆盖已有的业务消息。
一些可选的实施方式中,还包括去重模块1503,用于:
在持久化模块1502基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理之前,将所述类别的多个业务消息的标识信息在Redis中保存预设时长,基于Redis的数据去重算法对所述类别的多个业务消息进行去重处理。
一些可选的实施方式中,针对任一类别的消息队列,包括至少一个子队列;
任一类别的子队列的数量通过以下方式调整:
若所述类别的所有子队列缓存的业务消息的总数以及所述类别的子队列的数量之间的比值,大于第一比值,则增加所述类别的子队列;或者
若所述类别的所有子队列缓存的业务消息的总数以及所述类别的子队列的数量之间的比值,小于第二比值,且所述类别的子队列的数量大于预设数量,则减少所述类别的子队列;
其中,所述第一比值大于所述第二比值。
图15实施例的具体实现方式可以参见上述交互方法的实施,重复之处不再赘述。
基于相同的技术构思,本申请实施例还提供了一种入库处理设备1600,如图16所示,包括至少一个处理器1601,以及与至少一个处理器连接的存储器1602,本申请实施例中不限定处理器1601与存储器1602之间的具体连接介质,图16中处理器1601和存储器1602之间通过总线1603连接为例。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图16中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
其中,处理器1601是入库处理设备的控制中心,可以利用各种接口和线路连接入库处理设备的各个部分,通过运行或执行存储在存储器1602内的指令以及调用存储在存储器1602内的数据,从而实现数据处理。可选的,处理器1601可包括一个或多个处理单元,处理器1601可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理下发指令。可以理解的是,上述调制解调处理器也可以不集成到处理器1601中。在一些实施例中,处理器1601和存储器1602可以在同一芯片上实现,在一些实施例中,它们也可以在独立的芯片上分别实现。
处理器1601可以是通用处理器,例如中央处理器(CPU)、数字信号处理器、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本申请实施例中公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合业务持久化方法实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器1602作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。存储器1602可以包括至少一种类型的存储介质,例如可以包括闪存、硬盘、多媒体卡、卡型存储器、随机访问存储器(Random AccessMemory,RAM)、静态随机访问存储器(Static Random Access Memory,SRAM)、可编程只读存储器(Programmable Read Only Memory,PROM)、只读存储器(Read Only Memory,ROM)、带电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、磁性存储器、磁盘、光盘等等。存储器1602是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。本申请实施例中的存储器1602还可以是电路或者其它任意能够实现存储功能的装置,用于存储程序指令和/或数据。
在本申请实施例中,存储器1602存储有计算机程序,当该程序被处理器1601执行时,使得处理器1601执行:
从多个类别的消息队列中,分别获取各类别的多个业务消息;其中,各类别的消息队列中缓存有对应类别的业务消息;
针对获取的任一类别的多个业务消息,基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理。
一些可选的实施方式中,处理器1601具体执行:
通过所述类别对应的缓冲区的写入指针,按照所述缓冲区的缓冲位置顺序,将所述类别的业务消息依次写入缓冲区的缓冲位置;以及通过所述缓冲区的读取指针,按照所述缓冲区的缓冲位置顺序,依次读取通过所述写入指针写入的业务消息,并将读取的业务消息中需要入库的字段存入所述类别对应的存储位置。
一些可选的实施方式中,处理器1601还执行:
若所述写入指针与所述读取指针相邻,且在所述读取指针之后,则暂停通过所述写入指针将所述类别的业务消息写入所述缓冲区,并在所述写入指针与所述读取指针不相邻后,继续通过所述写入指针将所述类别的业务消息写入所述缓冲区;或者,
若所述读取指针与所述写入指针相邻,且在所述写入指针之后,则暂停通过所述读取指针读取业务消息,并在所述读取指针与所述写入指针不相邻后,继续通过所述读取指针读取业务消息。
一些可选的实施方式中,处理器1601具体执行:
若待写入的缓冲位置已有业务消息,则将需要写入的业务消息覆盖已有的业务消息。
一些可选的实施方式中,处理器1601还执行:
基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理之前,将所述类别的多个业务消息的标识信息在Redis中保存预设时长,基于Redis的数据去重算法对所述类别的多个业务消息进行去重处理。
一些可选的实施方式中,针对任一类别的消息队列,包括至少一个子队列;
任一类别的子队列的数量通过以下方式调整:
若所述类别的所有子队列缓存的业务消息的总数以及所述类别的子队列的数量之间的比值,大于第一比值,则增加所述类别的子队列;或者
若所述类别的所有子队列缓存的业务消息的总数以及所述类别的子队列的数量之间的比值,小于第二比值,且所述类别的子队列的数量大于预设数量,则减少所述类别的子队列;
其中,所述第一比值大于所述第二比值。
由于该入库处理设备即是本申请实施例中的方法中的入库处理设备,并且该入库处理设备解决问题的原理与该方法相似,因此该入库处理设备的实施可以参见方法的实施,重复之处不再赘述。
基于相同的技术构思,本申请实施例还提供了一种计算机可读存储介质,其存储有可由计算设备执行的计算机程序,当所述程序在所述计算设备上运行时,使得所述计算设备执行上述业务持久化方法的步骤。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (10)
1.一种业务持久化方法,其特征在于,应用于持久化系统,所述持久化系统包括联机处理设备、消息队列设备以及入库处理设备;该方法包括:
所述联机处理设备基于请求信息中需要入库的字段、表征类别的信息以及唯一标识请求信息的标识信息,生成对应的业务消息;
所述联机处理设备将所述业务消息以及所述业务消息的类别对应的消息队列信息发送至消息队列设备;
所述消息队列设备基于所述业务消息的类别对应的消息队列信息,将所述业务消息分配至对应类别的消息队列中;
所述入库处理设备从多个类别的消息队列中,分别获取各类别的多个业务消息;其中,各类别的消息队列中缓存有对应类别的业务消息;
所述入库处理设备针对获取的任一类别的多个业务消息,基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理。
2.如权利要求1所述的方法,其特征在于,基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理,包括:
通过所述类别对应的缓冲区的写入指针,按照所述缓冲区的缓冲位置顺序,将所述类别的业务消息依次写入缓冲区的缓冲位置;以及通过所述缓冲区的读取指针,按照所述缓冲区的缓冲位置顺序,依次读取通过所述写入指针写入的业务消息,并将读取的业务消息中需要入库的字段存入所述类别对应的存储位置。
3.如权利要求2所述的方法,其特征在于,还包括:
若所述写入指针与所述读取指针相邻,且在所述读取指针之后,则所述入库处理设备暂停通过所述写入指针将所述类别的业务消息写入所述缓冲区,并在所述写入指针与所述读取指针不相邻后,继续通过所述写入指针将所述类别的业务消息写入所述缓冲区;或者,
若所述读取指针与所述写入指针相邻,且在所述写入指针之后,则所述入库处理设备暂停通过所述读取指针读取业务消息,并在所述读取指针与所述写入指针不相邻后,继续通过所述读取指针读取业务消息。
4.如权利要求2所述的方法,其特征在于,将所述类别的业务消息依次写入缓冲区的缓冲位置,包括:
若待写入的缓冲位置已有业务消息,则将需要写入的业务消息覆盖已有的业务消息。
5.如权利要求1所述的方法,其特征在于,基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理之前,还包括:
所述入库处理设备将所述类别的多个业务消息的标识信息在远程字典服务Redis中保存预设时长,基于Redis的数据去重算法对所述类别的多个业务消息进行去重处理。
6.如权利要求1~5任一所述的方法,其特征在于,针对任一类别的消息队列,包括至少一个子队列;
任一类别的子队列的数量通过以下方式调整:
若所述类别的所有子队列缓存的业务消息的总数以及所述类别的子队列的数量之间的比值,大于第一比值,则增加所述类别的子队列;或者
若所述类别的所有子队列缓存的业务消息的总数以及所述类别的子队列的数量之间的比值,小于第二比值,且所述类别的子队列的数量大于预设数量,则减少所述类别的子队列;
其中,所述第一比值大于所述第二比值。
7.如权利要求1~5任一所述的方法,其特征在于,所述持久化系统还包括均衡负载器,且所述持久化系统中有多个联机处理设备;在联机处理设备基于请求信息中需要入库的字段、表征类别的信息以及唯一标识请求信息的标识信息,生成对应的业务消息之前,该方法包括:
所述均衡负载器基于顺序循环队列,从所有联机处理设备中顺序选择一个联机处理设备,并向选择的所述联机处理设备发送待处理信息;其中,所述待处理信息包括所述请求信息、所述表征类别的信息以及所述唯一标识请求信息的标识信息。
8.如权利要求7所述的方法,其特征在于,所述方法还包括:
若有联机处理设备发生故障,则所述均衡负载器将故障的联机处理设备从所述顺序循环队列中去除。
9.一种业务持久化方法,其特征在于,应用于入库处理设备,该方法包括:
从多个类别的消息队列中,分别获取各类别的多个业务消息;其中,各类别的消息队列中缓存有对应类别的业务消息;
针对获取的任一类别的多个业务消息,基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理。
10.一种业务持久化装置,其特征在于,包括:
业务消息获取模块,用于从多个类别的消息队列中,分别获取各类别的多个业务消息;其中,各类别的消息队列中缓存有对应类别的业务消息;
持久化模块,用于针对获取的任一类别的多个业务消息,基于所述类别对应的持久化方式,对所述类别的多个业务消息批量进行持久化处理。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111101807.0A CN113836184A (zh) | 2021-09-18 | 2021-09-18 | 一种业务持久化方法及装置 |
PCT/CN2022/100673 WO2023040399A1 (zh) | 2021-09-18 | 2022-06-23 | 一种业务持久化方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111101807.0A CN113836184A (zh) | 2021-09-18 | 2021-09-18 | 一种业务持久化方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113836184A true CN113836184A (zh) | 2021-12-24 |
Family
ID=78960088
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111101807.0A Pending CN113836184A (zh) | 2021-09-18 | 2021-09-18 | 一种业务持久化方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN113836184A (zh) |
WO (1) | WO2023040399A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023040399A1 (zh) * | 2021-09-18 | 2023-03-23 | 深圳前海微众银行股份有限公司 | 一种业务持久化方法及装置 |
CN116755637A (zh) * | 2023-08-17 | 2023-09-15 | 深圳华锐分布式技术股份有限公司 | 交易数据存储方法、装置、设备及介质 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116661969B (zh) * | 2023-06-07 | 2024-03-12 | 上海汉朔信息科技有限公司 | 一种基于消息队列的业务处理方法及系统 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107391269B (zh) * | 2016-03-28 | 2021-04-20 | 阿里巴巴集团控股有限公司 | 一种用于通过持久化队列处理消息的方法与设备 |
CN108255628A (zh) * | 2016-12-29 | 2018-07-06 | 北京国双科技有限公司 | 一种数据处理方法及装置 |
CN109672627A (zh) * | 2018-09-26 | 2019-04-23 | 深圳壹账通智能科技有限公司 | 基于集群服务器的业务处理方法、平台、设备及存储介质 |
CN111770030B (zh) * | 2019-05-17 | 2023-08-08 | 北京京东尚科信息技术有限公司 | 消息持久化处理方法、装置和存储介质 |
CN111104235B (zh) * | 2019-12-06 | 2022-09-09 | 江苏苏宁物流有限公司 | 一种基于队列的业务请求异步处理方法及装置 |
US10936500B1 (en) * | 2020-11-10 | 2021-03-02 | Memhive, Inc. | Conditional cache persistence in database systems |
CN112559211A (zh) * | 2020-12-16 | 2021-03-26 | 中国平安人寿保险股份有限公司 | 消息数据的更新方法、装置、计算机设备及存储介质 |
CN113836184A (zh) * | 2021-09-18 | 2021-12-24 | 深圳前海微众银行股份有限公司 | 一种业务持久化方法及装置 |
-
2021
- 2021-09-18 CN CN202111101807.0A patent/CN113836184A/zh active Pending
-
2022
- 2022-06-23 WO PCT/CN2022/100673 patent/WO2023040399A1/zh unknown
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023040399A1 (zh) * | 2021-09-18 | 2023-03-23 | 深圳前海微众银行股份有限公司 | 一种业务持久化方法及装置 |
CN116755637A (zh) * | 2023-08-17 | 2023-09-15 | 深圳华锐分布式技术股份有限公司 | 交易数据存储方法、装置、设备及介质 |
CN116755637B (zh) * | 2023-08-17 | 2024-02-09 | 深圳华锐分布式技术股份有限公司 | 交易数据存储方法、装置、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2023040399A1 (zh) | 2023-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113836184A (zh) | 一种业务持久化方法及装置 | |
US8332367B2 (en) | Parallel data redundancy removal | |
CN112597153B (zh) | 一种基于区块链的数据存储方法、装置及存储介质 | |
CN109543455B (zh) | 一种区块链的数据归档方法及装置 | |
CN105684020B (zh) | 硬件平台中的订单账簿管理设备 | |
CN113364877B (zh) | 数据处理方法、装置、电子设备和介质 | |
CN110109868A (zh) | 用于索引文件的方法、装置和计算机程序产品 | |
CN113656501B (zh) | 一种数据读取方法、装置、设备以及存储介质 | |
CN113204407A (zh) | 一种内存超配管理方法及装置 | |
CN115470156A (zh) | 基于rdma的内存使用方法、系统、电子设备和存储介质 | |
CN112835511B (zh) | 分布式存储集群的数据写入方法、装置、设备和介质 | |
CN109347899B (zh) | 在分布式存储系统中写入日志数据的方法 | |
CN115840654B (zh) | 消息的处理方法、系统、计算设备及可读存储介质 | |
US9003129B1 (en) | Techniques for inter-storage-processor cache communication using tokens | |
CN110827001A (zh) | 一种会计事件记账方法、系统、设备和存储介质 | |
US9811403B1 (en) | Method, apparatus and system for performing matching operations in a computing system | |
US10282301B2 (en) | Method and system for hardware accelerated read-ahead caching | |
CN115617802A (zh) | 一种全量快照快速生成方法、装置、电子设备及存储介质 | |
CN114896215A (zh) | 元数据的存储方法及装置 | |
US11061571B1 (en) | Techniques for efficiently organizing and accessing compressible data | |
CN111399753B (zh) | 写入图片的方法和装置 | |
CN114489770A (zh) | 灰度发布方法、装置、计算机设备和存储介质 | |
CN114327248A (zh) | 存储节点、存储设备及网络芯片 | |
CN113468105A (zh) | 数据快照的数据结构、相关数据处理方法及装置和系统 | |
CN108874560B (zh) | 进行通信的方法和通信设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |