CN104102552A - 一种消息处理方法及装置 - Google Patents
一种消息处理方法及装置 Download PDFInfo
- Publication number
- CN104102552A CN104102552A CN201310130431.5A CN201310130431A CN104102552A CN 104102552 A CN104102552 A CN 104102552A CN 201310130431 A CN201310130431 A CN 201310130431A CN 104102552 A CN104102552 A CN 104102552A
- Authority
- CN
- China
- Prior art keywords
- data
- file
- data file
- message
- written
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种消息处理方法,该方法包括:创建数据文件以及与所述数据文件对应的索引文件,将所述数据文件及所述数据文件对应的索引文件映射到内存;将待写入的消息数据写入数据文件中,并根据写入所述待写入的消息数据的数据文件的信息填写该数据文件对应的索引文件;以及,根据索引文件读取该索引文件对应的数据文件中的消息数据。本发明还同时公开了一种消息处理装置。采用本发明的消息处理方法及装置,能够在保证消息的高读写效率的同时,实现了在进程异常导致退出时,消息数据不会丢失。
Description
技术领域
本发明涉及互联网通信技术,具体涉及一种消息处理方法及装置。
背景技术
目前,对消息队列的处理存在如下几种方案:
方案一:进程级内存缓冲消息,并将消息异步保存到数据库;
方案二:进程级内存缓冲消息,并将消息异步保存到数据文件;
方案三:将消息顺序写二进制文件,并将二进制文件异步保存到数据文件。
针对方案一,进程级的内存缓冲,可以实现消息的快速接收,但是如果保存到数据库的速度慢就会影响进程级内存缓冲消息的接收量,因为缓冲是有限制的,而且这种内存缓冲在进程异常导致退出时,缓冲的消息就全部丢失;此方案的消息吞吐量一般在每秒5000~8000条。
针对方案二,为了解决方案一保存到数据库的速度问题,采用直接保存到数据文件中的方式,所述数据文件为二进制文件,这样就避免了数据库的结构化查询语言(SQL,Structured Query Language)解析和事务控制导致存储的速度慢的问题,消息的吞吐量也可以提高20~30%,但是此方案还是避免不了内存缓冲在进程异常导致退出时,缓冲的消息丢失的问题。
针对方案三,为了解决内存缓冲在进程异常导致退出时,缓冲的消息丢失的问题,此方案就不做进程缓冲了,而改成先直接顺序写二进制文件,虽然这种方式大大减少了硬盘寻道的时间,但是比起进程的内存缓冲还是比较慢,因此该方案消息吞吐量不高,但保证了内存缓冲在进程异常导致退出时,缓冲的消息不会丢失。
发明内容
有鉴于此,本发明的主要目的在于提供一种消息处理方法及装置,能够保证在消息的高读写效率的同时,解决在进程异常导致退出时,消息丢失的问题。
为达到上述目的,本发明的技术方案是这样实现的:
本发明提供了一种消息处理方法,该方法包括:
创建数据文件以及与所述数据文件对应的索引文件,将所述数据文件及所述数据文件对应的索引文件映射到内存;
将待写入的消息数据写入数据文件中,并根据写入所述待写入的消息数据的数据文件的信息填写该数据文件对应的索引文件;以及,根据索引文件读取该索引文件对应的数据文件中的消息数据。
上述方案中,所述创建数据文件包括:
创建一个以上的大小相同的数据文件,使所述一个以上的大小相同的数据文件组成数据文件队列。
上述方案中,所述根据写入所述待写入的消息数据的数据文件的信息填写该数据文件对应的索引文件包括:
获取数据文件在数据文件队列中的序号、数据文件的位置信息、数据文件中当前写入的消息数据的总数,并写入该数据文件对应的索引文件中。
上述方案中,所述将待写入的消息数据写入数据文件中包括:
确定待写入的消息数据的长度信息,并将待写入的消息数据表示为二进制数据,在所述数据文件中记录所述待写入的消息数据的长度信息及其二进制数据。
上述方案中,该方法还包括:
读取完一个数据文件,删除该数据文件的映射,回收该数据文件的内存映射区。
本发明还提供了一种消息处理装置,该装置包括创建单元、控制单元、内存、数据读取单元和数据写入单元;其中,
所述创建单元,用于创建数据文件以及与所述数据文件对应的索引文件;
所述控制单元,用于将所述数据文件及所述数据文件对应的索引文件映射到所述内存;
所述数据读取单元,用于根据索引文件读取该索引文件对应的数据文件中的消息数据;
所述数据写入单元,用于将待写入的消息数据写入数据文件中,并根据写入所述待写入的消息数据的数据文件的信息填写该数据文件对应的索引文件。
上述方案中,所述创建单元,还用于创建一个以上的大小相同的数据文件,使所述一个以上的大小相同的数据文件组成数据文件队列。
上述方案中,所述控制单元,还用于获取数据文件在数据文件队列中的序号、数据文件的位置信息、数据文件中当前写入的消息数据的总数;
所述数据写入单元,还用于将所述控制单元获取的数据文件在数据文件队列中的序号、数据文件的位置信息、数据文件中当前写入的消息数据的总数写入该数据文件对应的索引文件中。
上述方案中,所述控制单元,还用于确定待写入的消息数据的长度信息;
所述数据写入单元,还用于将所述控制单元确定的待写入的消息数据的长度信息及二进制数据表示的消息数据写入数据文件中。
上述方案中,所述控制单元,还用于在读取完一个数据文件时,删除该数据文件的映射,回收该数据文件的内存映射区。
本发明提供的消息处理方法及装置,创建数据文件以及与所述数据文件对应的索引文件,将所述数据文件及所述数据文件对应的索引文件映射到内存;将待写入的消息数据写入数据文件中,并根据写入所述待写入的消息数据的数据文件的信息填写该数据文件对应的索引文件;以及,根据索引文件读取该索引文件对应的数据文件中的消息数据;如此,保证了消息的高读写效率的同时,实现了在进程异常导致退出时,消息数据不会丢失。
附图说明
图1为本发明消息处理方法的流程示意图;
图2为本发明数据文件的示意图;
图3为本发明消息处理装置的组成结构示意图。
具体实施方式
下面结合附图及具体实施例对本发明再作进一步详细的说明。
图1为本发明消息处理方法的流程示意图,如图1所示,包括以下步骤:
步骤101:创建数据文件以及与所述数据文件对应的索引文件,将所述数据文件及所述数据文件对应的索引文件映射到内存;
进一步的,所述创建数据文件包括:
创建一个以上的大小相同的数据文件,使所述一个以上的大小相同的数据文件组成数据文件队列。
这里,所述数据文件为按预先设置大小创建的数据文件,且多个所述数据文件组成数据文件队列;如图2所示;
其中,所述数据文件记录有消息数据的长度、以二进制数据表示的消息数据;
进一步的,当读取数据文件时,根据所述数据文件创建索引文件,例如:获取数据文件在数据文件队列中的序号,假设所述序号为1、获取数据文件的位置信息XXX、获取数据文件中当前写入的消息数据的总数为YYY,则所述索引文件的格式为:1/XXX/YYY,以便能够根据索引文件快速地读取数据文件。
进一步的,在写入数据文件时,创建的数据文件和对应的索引文件均为空文件,保留了所述索引文件和所述数据文件应有的格式;
其中,可将数据文件的大小固定为某个数值大小,例如10兆(10M),能够大大减少所需要的内存空间。
步骤102:将待写入的消息数据写入数据文件中,并根据写入所述待写入的消息数据的数据文件的信息填写该数据文件对应的索引文件;
进一步的,所述根据写入所述待写入的消息数据的数据文件的信息填写该数据文件对应的索引文件包括:
获取数据文件在数据文件队列中的序号、数据文件的位置信息、数据文件中当前写入的消息数据的总数,并写入该数据文件对应的索引文件中。
这里,可根据控制单元提供的接口获取数据文件在数据文件队列中的序号、数据文件的位置信息、数据文件中当前写入的消息数据的总数。
进一步的,所述将待写入的消息数据写入数据文件中包括:
确定待写入的消息数据的长度信息,并将待写入的消息数据表示为二进制数据,在所述数据文件中记录所述待写入的消息数据的长度信息及其二进制数据。
步骤103:根据索引文件读取该索引文件对应的数据文件中的消息数据;
进一步的,该方法还包括:读取完一个数据文件,删除该数据文件的映射,回收该数据文件的内存映射区,将数据队列中的下一个数据文件映射到内存中继续读取数据。
这里,由于控制单元提供有读写接口,一方面用于读写数据,另一方面还用于控制读写数据的速率,以及,获取写入的消息数据总数,获取读取的消息数据总数、获取数据文件中的剩余消息数据的总数等。
为实现上述方法,本发明还提供了一种消息处理装置,如图3所示,该装置包括创建单元35、控制单元31、内存32、数据读取单元33和数据写入单元34;其中,
所述创建单元35,用于创建数据文件以及与所述数据文件对应的索引文件;
所述控制单元31,用于将所述数据文件及所述数据文件对应的索引文件映射到所述内存32;
所述数据读取单元33,用于根据索引文件读取该索引文件对应的数据文件中的消息数据;
所述数据写入单元34,用于将待写入的消息数据写入数据文件中,并根据写入所述待写入的消息数据的数据文件的信息填写该数据文件对应的索引文件。
进一步的,所述创建单元35,具体用于创建一个以上的大小相同的数据文件,使所述一个以上的大小相同的数据文件组成数据文件队列。
进一步的,所述控制单元31,还用于获取数据文件在数据文件队列中的序号、数据文件的位置信息、数据文件中当前写入的消息数据的总数;
所述数据写入单元34,还用于将所述控制单元31获取的数据文件在数据文件队列中的序号、数据文件的位置信息、数据文件中当前写入的消息数据的总数写入该数据文件对应的索引文件中。
这里,所述控制单元提供有读写接口,一方面用于读写数据,另一方面还用于控制读写数据的速率,以及,获取写入的消息数据的总数,获取读取的消息数据的总数、获取数据文件中的剩余消息数据的总数等。
进一步的,所述控制单元31,还用于确定待写入的消息数据的长度信息;
所述数据写入单元34,还用于将所述控制单元31确定的待写入的消息数据的长度信息及二进制数据表示的消息数据写入数据文件中。
进一步的,所述控制单元31,还用于当读取完一个数据文件时,删除该数据文件的映射,回收该数据文件的内存映射区。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本发明的保护范围之内。
Claims (10)
1.一种消息处理方法,其特征在于,该方法包括:
创建数据文件以及与所述数据文件对应的索引文件,将所述数据文件及所述数据文件对应的索引文件映射到内存;
将待写入的消息数据写入数据文件中,并根据写入所述待写入的消息数据的数据文件的信息填写该数据文件对应的索引文件;以及,根据索引文件读取该索引文件对应的数据文件中的消息数据。
2.根据权利要求1所述的消息处理方法,其特征在于,所述创建数据文件包括:
创建一个以上的大小相同的数据文件,使所述一个以上的大小相同的数据文件组成数据文件队列。
3.根据权利要求2所述的消息处理方法,其特征在于,所述根据写入所述待写入的消息数据的数据文件的信息填写该数据文件对应的索引文件包括:
获取数据文件在数据文件队列中的序号、数据文件的位置信息、数据文件中当前写入的消息数据的总数,并写入该数据文件对应的索引文件中。
4.根据权利要求3所述的消息处理方法,其特征在于,所述将待写入的消息数据写入数据文件中包括:
确定待写入的消息数据的长度信息,并将待写入的消息数据表示为二进制数据,在所述数据文件中记录所述待写入的消息数据的长度信息及其二进制数据。
5.根据权利要求2所述的消息处理方法,其特征在于,该方法还包括:
读取完一个数据文件,删除该数据文件的映射,回收该数据文件的内存映射区。
6.一种消息处理装置,其特征在于,该装置包括创建单元、控制单元、内存、数据读取单元和数据写入单元;其中,
所述创建单元,用于创建数据文件以及与所述数据文件对应的索引文件;
所述控制单元,用于将所述数据文件及所述数据文件对应的索引文件映射到所述内存;
所述数据读取单元,用于根据索引文件读取该索引文件对应的数据文件中的消息数据;
所述数据写入单元,用于将待写入的消息数据写入数据文件中,并根据写入所述待写入的消息数据的数据文件的信息填写该数据文件对应的索引文件。
7.根据权利要求6所述的消息处理装置,其特征在于,所述创建单元,还用于创建一个以上的大小相同的数据文件,使所述一个以上的大小相同的数据文件组成数据文件队列。
8.根据权利要求7所述的消息处理装置,其特征在于,
所述控制单元,还用于获取数据文件在数据文件队列中的序号、数据文件的位置信息、数据文件中当前写入的消息数据的总数;
所述数据写入单元,还用于将所述控制单元获取的数据文件在数据文件队列中的序号、数据文件的位置信息、数据文件中当前写入的消息数据的总数写入该数据文件对应的索引文件中。
9.根据权利要求7所述的消息处理装置,其特征在于,
所述控制单元,还用于确定待写入的消息数据的长度信息;
所述数据写入单元,还用于将所述控制单元确定的待写入的消息数据的长度信息及二进制数据表示的消息数据写入数据文件中。
10.根据权利要求7所述的消息处理装置,其特征在于,所述控制单元,还用于在读取完一个数据文件时,删除该数据文件的映射,回收该数据文件的内存映射区。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310130431.5A CN104102552A (zh) | 2013-04-15 | 2013-04-15 | 一种消息处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310130431.5A CN104102552A (zh) | 2013-04-15 | 2013-04-15 | 一种消息处理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104102552A true CN104102552A (zh) | 2014-10-15 |
Family
ID=51670723
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310130431.5A Pending CN104102552A (zh) | 2013-04-15 | 2013-04-15 | 一种消息处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104102552A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105138410A (zh) * | 2015-08-31 | 2015-12-09 | 北京锐安科技有限公司 | 一种基于磁盘缓存的消息队列的实现方法及装置 |
CN107133111A (zh) * | 2017-04-27 | 2017-09-05 | 努比亚技术有限公司 | 一种消息处理装置及方法 |
CN108132845A (zh) * | 2016-12-01 | 2018-06-08 | 阿里巴巴集团控股有限公司 | 消息存储、投递方法和装置以及电子设备 |
CN111541667A (zh) * | 2020-04-16 | 2020-08-14 | 广东好太太科技集团股份有限公司 | 一种***间消息通信的方法、设备、存储介质 |
CN112486913A (zh) * | 2020-11-12 | 2021-03-12 | 思创数码科技股份有限公司 | 一种基于集群环境下的日志异步存储方法和设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1517906A (zh) * | 2003-01-14 | 2004-08-04 | 联想(北京)有限公司 | 文件***及文件管理方法 |
CN101533408A (zh) * | 2009-04-21 | 2009-09-16 | 北京四维图新科技股份有限公司 | 一种海量数据的处理方法及处理装置 |
CN101783740A (zh) * | 2009-01-21 | 2010-07-21 | 大唐移动通信设备有限公司 | 消息文件管理方法及装置 |
-
2013
- 2013-04-15 CN CN201310130431.5A patent/CN104102552A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1517906A (zh) * | 2003-01-14 | 2004-08-04 | 联想(北京)有限公司 | 文件***及文件管理方法 |
CN101783740A (zh) * | 2009-01-21 | 2010-07-21 | 大唐移动通信设备有限公司 | 消息文件管理方法及装置 |
CN101533408A (zh) * | 2009-04-21 | 2009-09-16 | 北京四维图新科技股份有限公司 | 一种海量数据的处理方法及处理装置 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105138410A (zh) * | 2015-08-31 | 2015-12-09 | 北京锐安科技有限公司 | 一种基于磁盘缓存的消息队列的实现方法及装置 |
CN108132845A (zh) * | 2016-12-01 | 2018-06-08 | 阿里巴巴集团控股有限公司 | 消息存储、投递方法和装置以及电子设备 |
CN107133111A (zh) * | 2017-04-27 | 2017-09-05 | 努比亚技术有限公司 | 一种消息处理装置及方法 |
CN111541667A (zh) * | 2020-04-16 | 2020-08-14 | 广东好太太科技集团股份有限公司 | 一种***间消息通信的方法、设备、存储介质 |
CN112486913A (zh) * | 2020-11-12 | 2021-03-12 | 思创数码科技股份有限公司 | 一种基于集群环境下的日志异步存储方法和设备 |
CN112486913B (zh) * | 2020-11-12 | 2023-09-22 | 思创数码科技股份有限公司 | 一种基于集群环境下的日志异步存储方法和设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102508784B (zh) | 视频监控设备中闪存卡的数据存储方法及其*** | |
CN101533408B (zh) | 一种海量数据的处理方法及处理装置 | |
US9811419B2 (en) | Validation bits and offsets to represent logical pages split between data containers | |
CN102158349B (zh) | 一种日志管理装置及方法 | |
US9507821B2 (en) | Mail indexing and searching using hierarchical caches | |
CN105183839A (zh) | 一种基于Hadoop的小文件分级索引的存储优化方法 | |
CN109416666A (zh) | 具有压缩数据和标签的缓存 | |
CN104102552A (zh) | 一种消息处理方法及装置 | |
CN105094695B (zh) | 一种存储方法和*** | |
US10296250B2 (en) | Method and apparatus for improving performance of sequential logging in a storage device | |
CN107391544B (zh) | 列式存储数据的处理方法、装置、设备及计算机储存介质 | |
KR102198615B1 (ko) | 듀얼 프로그램 동작을 사용하는 불휘발성 메모리 장치, 그것을 포함하는 메모리 시스템 및 그들의 동작 방법 | |
CN104657366A (zh) | 海量日志写入数据库的方法、装置和日志容灾*** | |
CN102999441B (zh) | 一种细粒度内存访问的方法 | |
CN104142937A (zh) | 一种分布式数据存取方法、装置和*** | |
CN103793475A (zh) | 一种分布式文件***数据迁移的方法 | |
CN109885577A (zh) | 数据处理方法、装置、终端及存储介质 | |
CN103136215A (zh) | 存储***的数据读写方法和装置 | |
CN103927215B (zh) | 基于内存盘与SSD硬盘的kvm虚拟机调度的优化方法及*** | |
US9524236B1 (en) | Systems and methods for performing memory management based on data access properties | |
CN104991736A (zh) | 写数据方法、装置以及存储设备 | |
CN101996228A (zh) | 共享文件数据块的方法及解除共享文件数据块的方法 | |
CN109375868B (zh) | 一种数据存储方法、调度装置、***、设备及存储介质 | |
CN102789424B (zh) | 基于fpga的外扩ddr2的读写方法及基于fpga的外扩ddr2颗粒存储器 | |
CN102867046B (zh) | 基于固态硬盘的数据库优化方法及*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20141015 |
|
RJ01 | Rejection of invention patent application after publication |