CN109257320A - 消息存储方法和装置 - Google Patents
消息存储方法和装置 Download PDFInfo
- Publication number
- CN109257320A CN109257320A CN201710569350.3A CN201710569350A CN109257320A CN 109257320 A CN109257320 A CN 109257320A CN 201710569350 A CN201710569350 A CN 201710569350A CN 109257320 A CN109257320 A CN 109257320A
- Authority
- CN
- China
- Prior art keywords
- message
- message queue
- storage
- memory database
- queue
- 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
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/133—Protocols for remote procedure calls [RPC]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1001—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请公开了消息存储方法和装置。该方法的一具体实施方式包括:构建多个消息队列;接收客户端发送的多个消息,并将多个消息存储到各消息队列;基于负载均衡算法,对消息队列执行存储操作,将各消息队列存储到数据库集群中的内存数据库中。上述消息存储方法通过将消息存储在数据库集群中的内存数据库中,使得各消息可以通过数据库集群被集中管理,且可以提高消息数据的读写速度。
Description
技术领域
本申请涉及计算机技术领域,具体涉及数据存储领域,尤其涉及消息存储方法和装置。
背景技术
在互联网和电子商务领域,每天都会产生大量的消息,这就需要对产生的各式各样的消息进行数据存储和管理。在现有技术中,客户端和服务器之间通常使用RPC(RemoteProcedure Call,远程过程调用)同步处理技术进行通讯,RPC通常需要将客户端和服务器紧密耦合,在消息数据传递的过程中,客户端需要等待服务器对前一个消息响应才能继续发送下一个消息,导致客户端容易被阻塞,并且RPC紧密耦合的特性使得***的扩展性较差。
为了克服RPC技术的上述缺点,现有技术还可以采用消息队列异步处理技术进行通讯,在消息数据传递的过程中,客户端可以通过特定的算法将信息存储在服务器的本地磁盘中。但是,采用分布式队列机制时,在分布式环境下每个服务器只能处理本地的数据,使得消息数据不能集中管理,维护成本较高。并且,各消息队列存储在服务器的本地磁盘中会造成消息数据读写速度慢。
发明内容
本申请的目的在于提出一种改进的消息存储方法和装置,来解决以上背景技术部分提到的技术问题。
第一方面,本申请提供了一种消息存储方法,该方法包括:构建多个消息队列;接收客户端发送的多个消息,并将多个消息存储到各消息队列;基于负载均衡算法,对消息队列执行存储操作,将各消息队列存储到数据库集群中的内存数据库中。
在一些实施例中,各消息携带该消息的类型标识,类型标识用于确定各消息的消息类型;将多个消息存储到各消息队列,包括:根据各消息的消息类型,将多个消息存储到各消息队列中与消息的消息类型对应的消息队列。
在一些实施例中,基于负载均衡算法,对消息队列执行存储操作,将各消息队列存储到数据库集群中的内存数据库中,包括:根据第一消息队列中存储的消息的消息类型,确定与第一消息队列对应的至少一个内存数据库,其中,第一消息队列为任一消息队列;基于负载均衡算法,在至少一个内存数据库中确定用于存储第一消息队列的内存数据库;将第一消息队列存储到所确定的内存数据库。
在一些实施例中,上述方法还包括:在将第一消息队列存储到所确定的内存数据库之前,判断该所确定的内存数据库的负载量是否大于第一预设阈值;若是,则将第一消息队列***为至少两个子消息队列,并将各子消息队列存储到对应的内存数据库;若否,则将第一消息队列存储到所确定的内存数据库。
在一些实施例中,上述方法还包括:在将第一消息队列存储到所确定的内存数据库之前,判断第一消息队列中存储的消息的数量是否大于第二预设阈值;若是,则将第一消息队列***为至少两个子消息队列,并将各子消息队列存储到对应的内存数据库;若否,则将第一消息队列存储到所确定的内存数据库。
在一些实施例中,将各子消息队列存储到对应的内存数据库,包括:根据子消息队列存储的消息的消息类型,确定与子消息队列对应的至少一个内存数据库;基于负载均衡算法,在至少一个内存数据库中确定用于存储子消息队列的内存数据库;将子消息队列存储到所确定的内存数据库。
在一些实施例中,当存在储失败的消息队列时,将存储失败的消息队列重新作为消息队列n次执行存储操作,将消息队列存储到内存数据库,其中,n为正整数且n≤m,m为预设正整数。
在一些实施例中,当存在第二消息队列时,将该第二消息队列存储到本地磁盘,其中,第二消息队列为m次执行存储操作存储失败的消息队列;获取本地磁盘在预设时间段内存储的第二消息队列,并将所获取的第二消息队列作为消息队列执行存储操作。
第二方面,本申请提供了一种消息存储装置,该装置包括:构建模块,配置用于构建多个消息队列;第一存储模块,配置用于接收客户端发送的多个消息,并将多个消息存储到各消息队列;第二存储模块,配置用于基于负载均衡算法,对消息队列执行存储操作,将各消息队列存储到数据库集群中的内存数据库中。
在一些实施例中,各消息携带该消息的类型标识,类型标识用于确定各消息的消息类型;第一存储模块配置具体用于:根据各消息的消息类型,将多个消息存储到各消息队列中与消息的消息类型对应的消息队列。
在一些实施例中,第二存储模块配置具体用于:根据第一消息队列中存储的消息的消息类型,确定与第一消息队列对应的至少一个内存数据库,其中,第一消息队列为任一消息队列;基于负载均衡算法,在至少一个内存数据库中确定用于存储第一消息队列的内存数据库;将第一消息队列存储到所确定的内存数据库。
在一些实施例中,上述装置还包括:第一判断模块,配置用于在将第一消息队列存储到所确定的内存数据库之前,判断该所确定的内存数据库的负载量是否大于第一预设阈值;若是,则将第一消息队列***为至少两个子消息队列,并将各子消息队列存储到对应的内存数据库;若否,则将第一消息队列存储到所确定的内存数据库。
在一些实施例中,第二判断模块,配置用于在将第一消息队列存储到所确定的内存数据库之前,判断第一消息队列中存储的消息的数量是否大于第二预设阈值;若是,则将第一消息队列***为至少两个子消息队列,并将各子消息队列存储到对应的内存数据库;若否,则将第一消息队列存储到所确定的内存数据库。
在一些实施例中,第一判断模块或第二判断模块配置还用于根据子消息队列存储的消息的消息类型,确定与子消息队列对应的至少一个内存数据库;基于负载均衡算法,在至少一个内存数据库中确定用于存储子消息队列的内存数据库;将子消息队列存储到所确定的内存数据库。
在一些实施例中,第三存储模块,配置用于当存在储失败的消息队列时,将存储失败的消息队列重新作为消息队列n次执行存储操作,将消息队列存储到内存数据库,其中,n为正整数且n≤m,m为预设正整数。
在一些实施例中,第四存储模块,配置用于当存在第二消息队列时,将该第二消息队列存储到本地磁盘,其中,第二消息队列为m次执行存储操作存储失败的消息队列;获取本地磁盘在预设时间段内存储的第二消息队列,并将所获取的第二消息队列作为消息队列执行存储操作。
本申请提供的消息存储方法和装置,首先将接收到的客户端发送的多个消息存储到预先构建的多个消息队列中,而后基于负载均衡算法对各消息队列执行存储操作,将各消息队列存储到数据库集群中的内存数据库中,可以实现通过数据库集群对消息数据进行集中管理,并且将各消息存储到内存数据库,可以提高消息数据的读写效率。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1示出了本申请可以应用于其中的示例性***架构;
图2示出了根据本申请的消息存储方法的一个实施例的流程;
图3示出了根据本申请的消息存储方法的又一个实施例的流程;
图4示出了根据本申请的消息存储装置的一个实施例的结构示意图;
图5示出了适于用来实现本申请实施例的客户端或服务器的计算机***的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
图1示出了可以应用本申请的消息存储方法或消息存储装置的实施例的示例性***架构100。
如图1所示,***架构100可以包括客户端101,网络102、104,包括多个服务器103的服务器集群和包括多个内存数据库105的数据库集群。网络102、104用以在客户端101、服务器103和内存数据库105之间提供通信链路的介质。网络102、104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
在本实施例中,客户端101并不特指某一类型的终端,客户端101可以为运行有多个应用以向用户提供线上服务的服务器。内存数据库105可以存储各个服务器103发送的消息数据。客户端101可以接收用户在终端设备(未示出)上安装有各种通讯客户端应用产生的消息,例如网页浏览器应用、购物类应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。
服务器103可以是提供各种服务的服务器,例如对客户端101的消息存储请求提供支持的后台服务器。后台服务器可以对接收到的消息等进行分析处理,并根据处理结果将消息存储到对应的内存数据库105中。
需要说明的是,本申请实施例所提供的消息存储方法一般由服务器103执行,相应地,消息存储装置一般设置于服务器103中。
应该理解,图1中的客户端、网络、服务器和内存数据库的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络、服务器和内存数据库。
继续参考图2,示出了根据本申请的消息存储方法的一个实施例的流程200。本实施例中的消息存储方法可以包括以下步骤:
步骤201,构建多个消息队列。
在本实施例中,消息存储方法运行于其上的电子设备(例如图1所示的服务器103)可以预先构建多个用于存储消息的消息队列。可以理解,各消息队列是在消息传输的过程中用于保存消息的容器,每个消息队列可以保存一条或多条消息,可见消息队列可以保证消息的传递。
这里,消息存储方法可以运行在多个上述电子设备上,各电子设备可以组成一集群,且该集群中的各电子设备上均可以执行本实施例提供的消息存储方法。因此,上述各电子设备上均可以构建有用于存储消息的消息队列。
步骤202,接收客户端发送的多个消息,并将多个消息存储到各消息队列。
在本实施例中,上述各电子设备可以通过有线连接方式或者无线连接方式接收从客户端(例如图1所示的客户端101)发送的消息,并将接收到的各消息发送到存储到预先构建的消息队列中。可以理解,上述不同的电子设备可以接收不同类型的消息,或者上述不同的电子设备可以接收不同的客户端发送的消息,这里没有唯一的限定。可以理解,上述电子设备可以根据各消息队列已存储消息的数量确定用于存储接收到消息的消息队列,或者上述电子设备还可以根据消息的类型确定用于存储所接收到消息的消息队列,这里没有唯一限定。需要指出的是,上述无线连接方式可以包括但不限于3G/4G连接、WiFi连接、蓝牙连接、WiMAX连接、Zigbee连接、UWB(ultra wideband)连接、以及其他现在已知或将来开发的无线连接方式。
步骤203,基于负载均衡算法,对消息队列执行存储操作,将各消息队列存储到数据库集群中的内存数据库中。
在本实例中,上述电子设备上可以部署负载均衡算法,以便于该电子设备可以基于负载均衡算法向内存数据库存储各消息队列。基于步骤202生成的存储有消息的消息队列,上述电子设备可以对各消息队列执行存储操作,将该电子设备中的消息队列存储到数据库集群中的内存数据库中。需要说明的,该数据库集群可以包括多个内存数据库,在集群环境中存储各消息可以避免把过多的消息数据存储在某一个内存数据库节点中,同时,将各消息队列存储到内存数据库而非本地磁盘中,可以提高消息数据的读写效率。
这里,数据库集群可以具有统一接口,通过该接口可以对存储在该数据库集群中的消息数据进行集中管理。可见,与将消息数据存储到本地磁盘分别进行管理相比,将消息数据存储到数据库集群中可以降低消息数据运行维护的成本。
本申请的上述实施例提供的消息存储方法,首先可以将接收到的客户端发送的多个消息存储到预先构建的多个消息队列中,而后基于负载均衡算法对各消息队列执行存储操作,将各消息队列存储到数据库集群中的内存数据库中,可以实现通过数据库集群对消息数据进行集中管理,并且将各消息存储到内存数据库,可以提高消息数据的读写效率。
请继续参考图3,其示出了根据本申请的消息存储方法的另一实施例的流程300。本实施例中的消息存储方法可以包括如下步骤:
步骤301,构建多个消息队列。
在本实施例中,在本实施例中,消息存储方法运行于其上的电子设备(例如图1所示的服务器103)可以预先构建多个消息队列,各消息队列可以用于存储一条或多条消息。
步骤302,接收客户端发送的多个消息,根据各消息的消息类型,将多个消息存储到各消息队列中与消息的消息类型对应的消息队列。
在本实施例中,客户端通常可以产生不同类型的消息,各消息可以携带用于确定该消息的消息类型的类型标识。进一步地,上述电子设备构建的不同的消息队列可以用于存储对应消息类型的消息。上述电子设备在接收到客户端发送的消息时,首先可以根据接收到的消息的类型标识确定所接收到的消息的消息类型,而后可以根据所确定的消息类型确定与之对应的消息队列,最后将所接收到的消息存储到所确定的消息队列中。可见,上述电子设备可以通过将客户端产生的消息根据消息类型存储到对应的消息队列中,从而实现了对各消息进行分类处理。
步骤303,根据第一消息队列中存储的消息的消息类型,确定与第一消息队列对应的至少一个内存数据库。
在本实施例中,数据库集群中的不同的内存数据库存储对应消息类型的消息,因此不同的内存数据库可以与存储有不同消息类型的消息的消息队列对应。可见,上述电子设备可以根据需要存储的消息队列中存储的消息的类型将该消息队列存储到数据库集群中与之对应的内存数据库中。具体地,以各电子设备中的各所有的消息队列中的第一消息队列的存储为例,该第一消息队列为各消息队列中的任一消息队列,该第一消息队列所在的电子设备可以获取第一消息队列中存储的消息的消息类型,之后可以根据所获取的消息类型在数据库集群中获取可以用于存储该消息类型的消息的至少一个内存数据库,以便于电子设备可以将第一消息队列存储到对应的内存数据库。
步骤304,基于负载均衡算法,在至少一个内存数据库中确定用于存储第一消息队列的内存数据库。
在本实施例中,基于步骤303确定的与第一消息队列对应的至少一个内存数据库,上述电子设备可以获取所确定的各内存数据库的负载情况,最后根据负载均衡算法在所确定的各内存数据库中确定可以用于存储上述第一消息队列的内存数据库,以便于将第一消息队列存储到该所确定的内存数据库,从而保证了数据库集群中的各内存数据库的负载平衡。
步骤305,判断该所确定的内存数据库的负载量是否大于第一预设阈值。
在本实施例中,可以预先为用于存储第一消息队列的内存数据库的负载量设置第一预设阈值,以便于可以将第一消息队列存储在负载量小于第一预设阈值的内存数据库中,避免了内存数据库在存储第一消息队列后负载量过大。基于步骤304确定的可以用于存储第一消息队列的内存数据库,上述电子设备可以判断该所确定的内存数据库的负载量是否大于上述第一预设阈值。若判断出所确定的内存数据库的负载量大于第一预设阈值,则可以转到步骤306。若判断出所确定的内存数据库的负载量小于或等于第一预设阈值,则可以转到步骤307。
步骤306,将第一消息队列***为至少两个子消息队列,并将各子消息队列存储到对应的内存数据库。
在本实施例中,基于步骤305判断出的所确定的内存数据库的负载量大于第一预设阈值,上述电子设备可以确定该内存数据库所剩内存不足以存储上述第一消息队列,此时可以将上述第一消息队列***为至少两个子消息队列,而后对各子消息队列进行存储。需要说明的是,上述电子设备可以根据第一消息队列中存储消息的数量的大小来确定将该第一消息队列具体分成的子消息队列的数量,从而可以实现将存储消息的数量过大的第一消息队列进行分散存储,避免了因单个消息队列中存储的消息的数量过于庞大造成的单个内存数据库节点出现数据堆积的现象,并且也能够避免单个消息队列存放太多的消息可以理解,上述电子设备还可以确定第一消息队列***成的各子消息队列所包括的消息的数量,避免***后的子消息队列仍包括过多的消息。
在本实施例的一些可选地实现方式中,上述电子设备还可以直接判断第一消息队列中存储的消息的数量是否大于第二预设阈值,并在判断出第一消息队列中存储消息的数量大于第二预设阈值时,将第一消息队列***成至少两个子消息队列。需要说明的是,上述电子设备可以根据第一消息队列中存储的消息的数量来确定第一消息队列***成的子消息队列的数量。进一步地,在判断出第一消息队列中存储消息的数量小于或等于第二预设阈值时,上述电子设备可以直接将第一消息队列存储到所确定的用于存储该第一消息队列的内存数据库中,这也可以保证各内存数据库的负载均衡。可以理解,上述电子设备可以在所确定的用于存储第一消息队列的内存数据库不大于第一预设阈值、且第一消息队列存储消息的数量不大于第二预设阈值的情况下,将该第一消息队列存储到所确定的内存数据库,这可以进一步的保证数据库集群中的各内存数据库负载均衡。
在本实施例的一些可选地实现方式中,上述电子设备在将第一消息队列***为多个子消息队列后,对于每个子消息可以根据该子消息队列存储的消息的消息类型,在数据库集群中确定对应的至少一个内存数据库。而后,基于负载均衡算法和所确定的至少一个内存数据库的负载量,在所确定的至少一个内存数据库中确定用于存储子消息队列的内存数据库,并将子消息队列存储到所确定的内存数据库中。
步骤307,将第一消息队列存储到所确定的内存数据库。
在本实施例中,基于步骤305判断出的所确定的用于存储第一消息队列的内存数据库的负载量小于或等于第一预设阈值,上述电子设备可以确定用于存储第一消息队列的内存数据库所剩的内存足以存储上述第一消息队列。此时,可以将第一消息队列存储到所确定的内存数据库中。
在本实施例的一些可选地实现方式中,在将各消息队列存储到内存数据库时,可能会出现消息队列存储失败的情况。当存在消息队列存储失败时,可以将该存储失败的消息队列重新作为消息队列n次执行存储操作,以便于将该消息队列存储到对应的内存数据库中。这里,n可以为正整数,并且n≤m,m为预设的正整数,从而使得存在消息队列存储失败时上述电子设备可以对该消息队列最多执行m次存储操作,以便于将该消息队列存储到对应的内存数据库中。避免了消息队列在存储过程中因某步骤执行失败或网络故障等造成数据丢失的情况的发生,保证了消息数据的安全可靠。这里,存储操作的步骤可以包括步骤303和步骤304,即上述电子设备可以根据存储失败的消息队列中存储消息的消息类型,确定与该存储失败的消息队列对应的至少一个内存数据库,以及基于负载均衡算法在所确定的至少一个内存数据库中确定用于存储该消息队列的内存数据库,以便于将该消息队列存储到所确定的内存数据库。
在本实施例的一些可选地实现方式中,当上述电子设备对某一消息队列执行m次存储操作,该消息队列仍不能成功地被存储到内存数据库中时,将该消息队列作为第二消息队列存储到本地磁盘中。而后,上述电子设备可以从本地磁盘获取预设时间段内存储的所有第二消息队列,并将各第二消息队列重新作为消息队列执行存储操作,以便于将各第二消息队列存储到对应的内存数据库中。可以理解,若第二消息队列存储仍失败时可以将各第二消息队列继续保存在本地磁盘,以便于再次对其执行存储操作。该方法可以避免消息数据的丢失,保证了消息数据的完整性。例如,当消息存储***在某段时间出现网络不通造成各消息队列存储失败时,此种情况下,可以将各消息队列作为第二消息队列存储到本地磁盘,待网络畅通时可以再把各第二消息队列存储到数据库集群的内存数据库中。可见,本实施例提供的消息存储方法具有较好的容错性,保证了消息数据的完整性。
在本实施例的一些可选地实现方式中,可以备份上述数据库集群中的各内存数据库中存储的消息,保证了消息数据的安全可靠。
本申请的上述实施例提供的消息存储方法,在基于负载均衡算法将各消息队列较均匀的分配到各内存数据库的前提下,还可以***存储有较多的消息的消息队列生成子消息队列,对各子消息队列执行存储操作,使得存储量较大的消息队列可以分散存储,该方法既避免了单个内存数据库堆积太多的消息,也避免了单个消息队列存放太多的消息,进一步地提高了数据库集群中的各内存数据库的负载均衡。
进一步参考图4,作为对上述各图所示方法的实现,本申请提供了一种消息存储装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
如图4所示,本实施例的消息存储装置400包括:构建模块401、第一存储模块402和第二存储模块403。其中,构建模块401配置用于构建多个消息队列;第一存储模块402配置用于接收客户端发送的多个消息,并将多个消息存储到各消息队列;第二存储模块403配置用于基于负载均衡算法,对消息队列执行存储操作,将各消息队列存储到数据库集群中的内存数据库中。
在本实施例的一些可选的实现方式中,各消息携带该消息的类型标识,类型标识用于确定各消息的消息类型;第一存储模块402配置具体用于根据各消息的消息类型,将多个消息存储到各消息队列中与消息的消息类型对应的消息队列。
在本实施例的一些可选的实现方式中,上述第二存储模块配置具体用于:根据第一消息队列中存储的消息的消息类型,确定与第一消息队列对应的至少一个内存数据库,其中,第一消息队列为任一消息队列;基于负载均衡算法,在至少一个内存数据库中确定用于存储第一消息队列的内存数据库;将第一消息队列存储到所确定的内存数据库。
在本实施例的一些可选的实现方式中,消息存储装置400还包括第一判断模块(未示出),配置用于在将第一消息队列存储到所确定的内存数据库之前,判断该所确定的内存数据库的负载量是否大于第一预设阈值;若是,则将第一消息队列***为至少两个子消息队列,并将各子消息队列存储到对应的内存数据库;若否,则将第一消息队列存储到所确定的内存数据库。
在本实施例的一些可选的实现方式中,消息存储装置400还包括第二判断模块(未示出),配置用于在将第一消息队列存储到所确定的内存数据库之前,判断第一消息队列中存储的消息的数量是否大于第二预设阈值;若是,则将第一消息队列***为至少两个子消息队列,并将各子消息队列存储到对应的内存数据库;若否,则将第一消息队列存储到所确定的内存数据库。
在本实施例的一些可选地实现方式中,第一判断模块或第二判断模块配置还用于根据各子消息队列存储的消息的消息类型,确定与子消息队列对应的至少一个内存数据库;基于负载均衡算法,在至少一个内存数据库中确定用于存储子消息队列的内存数据库;将子消息队列存储到所确定的内存数据库。
在本实施例的一些可选地实现方式中,消息存储装置400还包括第三存储模块(未示出),配置用于当存在储失败的消息队列时,将存储失败的消息队列重新作为消息队列n次执行存储操作,将消息队列存储到内存数据库,其中,n为正整数且n≤m,m为预设正整数。
在本实施例的一些可选地实现方式中,消息存储装置400还包括第四存储模块(未示出),配置用于当存在第二消息队列时,将该第二消息队列存储到本地磁盘,其中,第二消息队列为m次执行存储操作存储失败的消息队列;获取本地磁盘在预设时间段内存储的第二消息队列,并将所获取的第二消息队列作为消息队列执行存储操作。
本领域技术人员可以理解,上述消息存储装置400还包括一些其他公知结构,例如处理器、存储器等,为了不必要地模糊本公开的实施例,这些公知的结构在图4中未示出。
下面参考图5,其示出了适于用来实现本申请实施例的终端设备或服务器的计算机***500的结构示意图。图5示出的终端设备/服务器仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图5所示,计算机***500包括中央处理单元(CPU)501,其可以根据存储在只读存储器(ROM)502中的程序或者从存储部分508加载到随机访问存储器(RAM)503中的程序而执行各种适当的动作和处理。在RAM 503中,还存储有***500操作所需的各种程序和数据。CPU 501、ROM 502以及RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
以下部件连接至I/O接口505:包括键盘、鼠标等的输入部分506;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分507;包括硬盘等的存储部分508;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分509。通信部分509经由诸如因特网的网络执行通信处理。驱动器510也根据需要连接至I/O接口505。可拆卸介质511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器510上,以便于从其上读出的计算机程序根据需要被安装入存储部分508。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分509从网络上被下载和安装,和/或从可拆卸介质511被安装。在该计算机程序被中央处理单元(CPU)501执行时,执行本申请的方法中限定的上述功能。需要说明的是,本申请的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括构建模块、第一存储模块、第二存储模块。其中,这些模块的名称在某种情况下并不构成对该单元本身的限定,例如,构建模块还可以被描述为“构建多个消息队列的模块”。
作为另一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的装置中所包含的;也可以是单独存在,而未装配入该装置中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该装置执行时,使得该装置:构建多个消息队列;接收客户端发送的多个消息,并将所述多个消息存储到各所述消息队列;基于负载均衡算法,对所述消息队列执行存储操作,将各所述消息队列存储到数据库集群中的内存数据库中。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
Claims (18)
1.一种消息存储方法,其特征在于,包括:
构建多个消息队列;
接收客户端发送的多个消息,并将所述多个消息存储到各所述消息队列;
基于负载均衡算法,对所述消息队列执行存储操作,将各所述消息队列存储到数据库集群中的内存数据库中。
2.根据权利要求1所述的方法,其特征在于,各所述消息携带该消息的类型标识,所述类型标识用于确定各所述消息的消息类型;
所述将所述多个消息存储到各所述消息队列,包括:
根据各所述消息的消息类型,将所述多个消息存储到各所述消息队列中与所述消息的消息类型对应的消息队列。
3.根据权利要求2述的方法,其特征在于,所述基于负载均衡算法,对所述消息队列执行存储操作,将各所述消息队列存储到数据库集群中的内存数据库中,包括:
根据第一消息队列中存储的所述消息的消息类型,确定与所述第一消息队列对应的至少一个内存数据库,其中,所述第一消息队列为任一所述消息队列;
基于所述负载均衡算法,在所述至少一个内存数据库中确定用于存储所述第一消息队列的所述内存数据库;
将所述第一消息队列存储到所确定的内存数据库。
4.根据权利要求3所述的方法,其特征在于,还包括:
在将所述第一消息队列存储到所确定的内存数据库之前,判断该所确定的内存数据库的负载量是否大于第一预设阈值;
若是,则将所述第一消息队列***为至少两个子消息队列,并将各所述子消息队列存储到对应的内存数据库;
若否,则将所述第一消息队列存储到所确定的内存数据库。
5.根据权利要求3所述的方法,其特征在于,还包括:
在将所述第一消息队列存储到所确定的内存数据库之前,判断所述第一消息队列中存储的所述消息的数量是否大于第二预设阈值;
若是,则将所述第一消息队列***为至少两个子消息队列,并将各所述子消息队列存储到对应的内存数据库;
若否,则将所述第一消息队列存储到所确定的内存数据库。
6.根据权利要求4或5所述的方法,其特征在于,所述将各所述子消息队列存储到对应的内存数据库,包括:
根据所述子消息队列存储的所述消息的消息类型,确定与所述子消息队列对应的至少一个所述内存数据库;
基于所述负载均衡算法,在所述至少一个所述内存数据库中确定用于存储所述子消息队列的所述内存数据库;
将所述子消息队列存储到所确定的内存数据库。
7.根据权利要求1所述的方法,其特征在于,还包括:
当存在储失败的消息队列时,将所述存储失败的消息队列重新作为所述消息队列n次执行所述存储操作,将所述消息队列存储到所述内存数据库,其中,n为正整数且n≤m,m为预设正整数。
8.根据权利要求7所述的方法,其特征在于,还包括:
当存在第二消息队列时,将该所述第二消息队列存储到本地磁盘,其中,所述第二消息队列为m次执行所述存储操作存储失败的所述消息队列;
获取所述本地磁盘在预设时间段内存储的所述第二消息队列,并将所获取的第二消息队列作为所述消息队列执行所述存储操作。
9.一种消息存储装置,其特征在于,包括:
构建模块,配置用于构建多个消息队列;
第一存储模块,配置用于接收客户端发送的多个消息,并将所述多个消息存储到各所述消息队列;
第二存储模块,配置用于基于负载均衡算法,对所述消息队列执行存储操作,将各所述消息队列存储到数据库集群中的内存数据库中。
10.根据权利要求9所述的装置,其特征在于,各所述消息携带该消息的类型标识,所述类型标识用于确定各所述消息的消息类型;
所述第一存储模块配置具体用于:
根据各所述消息的消息类型,将所述多个消息存储到各所述消息队列中与所述消息的消息类型对应的消息队列。
11.根据权利要求10所述的装置,其特征在于,所述第二存储模块配置具体用于:
根据第一消息队列中存储的所述消息的消息类型,确定与所述第一消息队列对应的至少一个内存数据库,其中,所述第一消息队列为任一所述消息队列;
基于所述负载均衡算法,在所述至少一个内存数据库中确定用于存储所述第一消息队列的所述内存数据库;
将所述第一消息队列存储到所确定的内存数据库。
12.根据权利要求11所述的装置,其特征在于,还包括:
第一判断模块,配置用于在将所述第一消息队列存储到所确定的内存数据库之前,判断该所确定的内存数据库的负载量是否大于第一预设阈值;
若是,则将所述第一消息队列***为至少两个子消息队列,并将各所述子消息队列存储到对应的内存数据库;
若否,则将所述第一消息队列存储到所确定的内存数据库。
13.根据权利要求11所述的装置,其特征在于,还包括:
第二判断模块,配置用于在将所述第一消息队列存储到所确定的内存数据库之前,判断所述第一消息队列中存储的所述消息的数量是否大于第二预设阈值;
若是,则将所述第一消息队列***为至少两个子消息队列,并将各所述子消息队列存储到对应的内存数据库;
若否,则将所述第一消息队列存储到所确定的内存数据库。
14.根据权利要求12或13所述的装置,其特征在于,所述第一判断模块或第二判断模块配置还用于根据所述子消息队列存储的所述消息的消息类型,确定与所述子消息队列对应的至少一个所述内存数据库;
基于所述负载均衡算法,在所述至少一个所述内存数据库中确定用于存储所述子消息队列的所述内存数据库;
将所述子消息队列存储到所确定的内存数据库。
15.根据权利要求9所述的装置,其特征在于,还包括:
第三存储模块,配置用于当存在储失败的消息队列时,将所述存储失败的消息队列重新作为所述消息队列n次执行所述存储操作,将所述消息队列存储到所述内存数据库,其中,n为正整数且n≤m,m为预设正整数。
16.根据权利要求15所述的装置,其特征在于,还包括:
第四存储模块,配置用于当存在第二消息队列时,将该所述第二消息队列存储到本地磁盘,其中,所述第二消息队列为m次执行所述存储操作存储失败的所述消息队列;
获取所述本地磁盘在预设时间段内存储的所述第二消息队列,并将所获取的第二消息队列作为所述消息队列执行所述存储操作。
17.一种服务器,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-8中任一所述的方法。
18.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-8中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710569350.3A CN109257320A (zh) | 2017-07-13 | 2017-07-13 | 消息存储方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710569350.3A CN109257320A (zh) | 2017-07-13 | 2017-07-13 | 消息存储方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109257320A true CN109257320A (zh) | 2019-01-22 |
Family
ID=65051649
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710569350.3A Pending CN109257320A (zh) | 2017-07-13 | 2017-07-13 | 消息存储方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109257320A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109918213A (zh) * | 2019-02-21 | 2019-06-21 | 北京奇艺世纪科技有限公司 | 一种消息处理方法、装置及服务器 |
CN110866066A (zh) * | 2019-11-04 | 2020-03-06 | 无锡华云数据技术服务有限公司 | 一种业务处理方法及装置 |
CN111209263A (zh) * | 2020-01-14 | 2020-05-29 | 中国建设银行股份有限公司 | 数据存储方法、装置、设备及存储介质 |
CN111338821A (zh) * | 2020-02-25 | 2020-06-26 | 北京思特奇信息技术股份有限公司 | 一种实现数据负载均衡的方法、***及电子设备 |
CN113127219A (zh) * | 2019-12-31 | 2021-07-16 | 中移(苏州)软件技术有限公司 | 数据存储方法、数据获取方法、装置和存储介质 |
CN113242232A (zh) * | 2021-05-07 | 2021-08-10 | 建信金融科技有限责任公司 | 消息处理***和方法 |
CN113535420A (zh) * | 2020-04-20 | 2021-10-22 | 北京沃东天骏信息技术有限公司 | 一种消息处理方法和装置 |
CN113835905A (zh) * | 2021-09-28 | 2021-12-24 | 北京奇艺世纪科技有限公司 | 一种消息队列负载均衡方法、装置、电子设备及介质 |
CN114510362A (zh) * | 2022-02-18 | 2022-05-17 | 歌尔股份有限公司 | 数据缓存处理方法、装置、设备以及存储介质 |
US11922026B2 (en) | 2022-02-16 | 2024-03-05 | T-Mobile Usa, Inc. | Preventing data loss in a filesystem by creating duplicates of data in parallel, such as charging data in a wireless telecommunications network |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101674257A (zh) * | 2008-09-10 | 2010-03-17 | 阿里巴巴集团控股有限公司 | 一种消息存储方法、装置及一种消息处理*** |
CN103024014A (zh) * | 2012-12-03 | 2013-04-03 | 北京京东世纪贸易有限公司 | 通过消息队列的海量数据分发处理的方法和*** |
US20140129704A1 (en) * | 2012-04-27 | 2014-05-08 | Xerox Business Services, Llc | Intelligent Work Load Manager |
CN105824697A (zh) * | 2016-03-23 | 2016-08-03 | 浪潮通信信息***有限公司 | 一种基于队列的分布式多级调度方法 |
CN106850402A (zh) * | 2017-01-16 | 2017-06-13 | 腾讯科技(深圳)有限公司 | 消息的传输方法和装置 |
-
2017
- 2017-07-13 CN CN201710569350.3A patent/CN109257320A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101674257A (zh) * | 2008-09-10 | 2010-03-17 | 阿里巴巴集团控股有限公司 | 一种消息存储方法、装置及一种消息处理*** |
US20140129704A1 (en) * | 2012-04-27 | 2014-05-08 | Xerox Business Services, Llc | Intelligent Work Load Manager |
CN103024014A (zh) * | 2012-12-03 | 2013-04-03 | 北京京东世纪贸易有限公司 | 通过消息队列的海量数据分发处理的方法和*** |
CN105824697A (zh) * | 2016-03-23 | 2016-08-03 | 浪潮通信信息***有限公司 | 一种基于队列的分布式多级调度方法 |
CN106850402A (zh) * | 2017-01-16 | 2017-06-13 | 腾讯科技(深圳)有限公司 | 消息的传输方法和装置 |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109918213A (zh) * | 2019-02-21 | 2019-06-21 | 北京奇艺世纪科技有限公司 | 一种消息处理方法、装置及服务器 |
CN110866066A (zh) * | 2019-11-04 | 2020-03-06 | 无锡华云数据技术服务有限公司 | 一种业务处理方法及装置 |
CN110866066B (zh) * | 2019-11-04 | 2023-01-31 | 华云数据控股集团有限公司 | 一种业务处理方法及装置 |
CN113127219A (zh) * | 2019-12-31 | 2021-07-16 | 中移(苏州)软件技术有限公司 | 数据存储方法、数据获取方法、装置和存储介质 |
CN111209263A (zh) * | 2020-01-14 | 2020-05-29 | 中国建设银行股份有限公司 | 数据存储方法、装置、设备及存储介质 |
CN111338821A (zh) * | 2020-02-25 | 2020-06-26 | 北京思特奇信息技术股份有限公司 | 一种实现数据负载均衡的方法、***及电子设备 |
CN113535420A (zh) * | 2020-04-20 | 2021-10-22 | 北京沃东天骏信息技术有限公司 | 一种消息处理方法和装置 |
CN113242232A (zh) * | 2021-05-07 | 2021-08-10 | 建信金融科技有限责任公司 | 消息处理***和方法 |
CN113835905A (zh) * | 2021-09-28 | 2021-12-24 | 北京奇艺世纪科技有限公司 | 一种消息队列负载均衡方法、装置、电子设备及介质 |
CN113835905B (zh) * | 2021-09-28 | 2023-09-05 | 北京奇艺世纪科技有限公司 | 一种消息队列负载均衡方法、装置、电子设备及介质 |
US11922026B2 (en) | 2022-02-16 | 2024-03-05 | T-Mobile Usa, Inc. | Preventing data loss in a filesystem by creating duplicates of data in parallel, such as charging data in a wireless telecommunications network |
CN114510362A (zh) * | 2022-02-18 | 2022-05-17 | 歌尔股份有限公司 | 数据缓存处理方法、装置、设备以及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109257320A (zh) | 消息存储方法和装置 | |
CN108960691A (zh) | 用于服务器***的确定物品库存的方法和装置 | |
CN108897854A (zh) | 一种超时任务的监控方法和装置 | |
CN110245011A (zh) | 一种任务调度方法和装置 | |
CN108874528A (zh) | 分布式任务存储***和分布式任务存储/读取方法 | |
CN109033001A (zh) | 用于分配gpu的方法和装置 | |
CN109995801A (zh) | 一种消息传输方法和装置 | |
CN110262807A (zh) | 集群创建进度日志采集***、方法和装置 | |
CN109936635A (zh) | 负载均衡方法和装置 | |
CN108874513A (zh) | 处理定时任务的方法、***、电子设备和计算机可读介质 | |
CN109905286A (zh) | 一种监控设备运行状态的方法和*** | |
CN110427304A (zh) | 用于银行***的运维方法、装置、电子设备以及介质 | |
CN110019539A (zh) | 一种数据仓库的数据同步的方法和装置 | |
CN110445632A (zh) | 一种预防客户端崩溃的方法和装置 | |
CN110515741A (zh) | 一种基于本地任务队列的降级处理方法和装置 | |
CN109885593A (zh) | 用于处理信息的方法和装置 | |
CN110070394A (zh) | 数据处理方法、***、介质和计算设备 | |
CN109976919A (zh) | 一种消息请求的传输方法和装置 | |
CN107403112A (zh) | 数据校验方法及其设备 | |
CN109491721A (zh) | 用于加载信息的方法和装置 | |
CN110389976A (zh) | 一种多接口数据的调度方法和装置 | |
CN110188969A (zh) | 一种控制任务下发的方法和装置 | |
CN109218125A (zh) | 一种心跳数据交互的方法和*** | |
CN110493291A (zh) | 一种处理http请求的方法和装置 | |
CN108984770A (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190122 |