CN101707633B - 一种基于文件系统的消息中间件持久消息的存储方法 - Google Patents
一种基于文件系统的消息中间件持久消息的存储方法 Download PDFInfo
- Publication number
- CN101707633B CN101707633B CN200910230963XA CN200910230963A CN101707633B CN 101707633 B CN101707633 B CN 101707633B CN 200910230963X A CN200910230963X A CN 200910230963XA CN 200910230963 A CN200910230963 A CN 200910230963A CN 101707633 B CN101707633 B CN 101707633B
- Authority
- CN
- China
- Prior art keywords
- message
- file
- index
- write
- byte stream
- 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.)
- Active
Links
Images
Abstract
本发明是一种基于文件系统的消息中间件持久消息的存储方法,包括如下步骤:第一步:以消息为参数创建AddMessageCommand;第二步:把AddMessageCommand对象序列化为字节流;第三步:将字节流写入日志文件,如果设置为异步模式,则将多个写入操作合并,将每个写入操作需写入的字节流合并,一次性写入到日志文件中;第四步:更新内存中的索引页,将消息标识符和消息对应于日志文件中的位置插入到索引树中的节点;第五步:写回索引文件。本发明提供了一种在保证消息存储的可靠性的同时,还提高了持久消息的读写性能的基于文件系统的消息中间件持久消息的存储方法。
Description
技术领域
本发明涉及一种基于文件系统的消息中间件持久消息的存储方法。
背景技术
以可靠传输为目的的消息中间件服务器,存储客户端发送给服务器端的消息是一个非常关键的环节。对消息的存储一般需要达到以下要求:
1)可靠性,能够将客户端发给服务器端的每条消息做持久化,能根据消息标识符定位到消息的准确存储位置。
2)性能,能够快速将消息在非易失性存储器和内存之间进行置换。
目前实现消息存储最常用的两种方式:
1.内存存储
将所有客户端发送给服务器端的消息保存在内存之中,由于所有消息均在内存中操作,采用这个方式的消息中间件吞吐性能非常高。但是该种方式存在以下问题:
如果服务器宕机,所有保存在内存之中的消息都将丢失,再次重启之后,这些消息无法被消费;
消息在内存中存储有容量限制,如果超出了可用的内存上限,将阻塞客户端的发送进程,直到这些消息被接收者取得而被服务器释放其所占用的内存。
2.数据库存储
将所有客户端发送给服务器端的消息保存在数据库之中,即使服务器宕机,重启之后消息中间件依然可以从数据库中恢复所有未被客户端接收的消息。但是该种方式存在以下问题:
在高负载的情况下,往数据库中频繁插入和删除消息记录的数据库操作会导致整个消息中间件消息吞吐性能严重降低。
绑定额外的数据库系统会降低服务器的处理性能和网络性能,还会增加用户的投资
综合以上两种方式,基于文件系统的消息中间件持久消息的存储技术需要解决可靠性问题,性能问题等。
发明内容
本发明的目的就是针对上述的不足,提供了一种在保证消息存储的可靠性的同时,还提高了持久消息的读写性能的基于文件系统的消息中间件持久消息的存储方法。
一种基于文件系统的消息中间件持久消息的存储方法,包括如下步骤:
第一步:以消息为参数创建AddMessageCommand。
即将AddMessageCommand的message字段设为需要存储的消息;将RemoveMessageCommand中的messageId设为需要从存储中删除的消息标识符。Visitor则提供了以访问者模式处理所有Command对象的方法,Visitor的子类IndexVisitor会根据不同的Command子类建立索引。
第二步:把AddMessageCommand对象序列化为字节流。
Command类提供了write和read序列化和反序列化的方法,write方法可以将Command对象序列化成字节流,read方法可以将字节流反序列化成Command对象。通过这样的方式,就可以将Command对象存储在日志文件中,也可以从日志文件读取内容生成Command对象。
第三步:将字节流写入日志文件,如果设置为异步模式,则将多个写入操作合并,将每个写入操作需写入的字节流合并,一次性写入到日志文件中。
第四步:更新内存中的索引页,将消息标识符和消息对应于日志文件中的位置插入到索引树中的节点。
索引信息存放在一个B+树的叶节点中,key对应于消息的标识符,value对应该消息在日志文件中的位置。每次在日志文件中添加一条消息记录,都会更新B+树更新索引信息。
每一个B+树节点都存放在索引文件中,每个节点占用的磁盘容量为4096个字节,在第一页中存放了整个索引的元数据,可以通过这个元数据找到所有队列的消息索引。由于内存容量的限制,并非将所有索引信息都存放在内存之中,而是通过设置索引页缓存保存最近使用的索引页。
第五步:写回索引文件,将更新的索引树节点所对应的文件页以双写的方式写回到索引文件。
每次更新索引文件都将需要更新的文件页全部顺序写入备份文件,当写入备份文件成功之后,再将这些文件页写回到索引文件,通过这样的方式来避免写回索引文件时宕机引起的索引文件不一致的问题。当写入备份文件不成功时,就直接丢弃这些需要更新的索引页,当写回索引页不成功时,则从备份文件恢复这些索引页。
然后设置一读取流程,具体来说为:
第一步:查找消息在日志文件中的位置,通过消息标识符在索引树上查找其对应的日志文件位置信息。
第二步:反序列化,读取日志文件,将读到的字节流反序列化成AddMessageCommand对象。
第三步:读取消息,从AddMessageCommand对象中取出消息。
本发明提供的基于文件系统的消息中间件持久消息的存储方法,具有如下优点:
1.可以做持久存储,即使宕机,也能保证在重启之后恢复所有的消息,将消息中间件运行状态恢复到宕机之前的运行状态。
2.可以根据消息标识符快速检索到消息,提高消息中间件消息的吞吐量。
附图说明
图1为本发明实施例中项向储子系统存储消息的流程图;
图2为本发明实施例中从存储子系统读取消息的流程图。
具体实施方式
下面以非限定性的实施方式来具体解释、说明本技术方案。
一种基于文件系统的消息中间件持久消息的存储方法,包括一存储步骤和一读取步骤。
存储步骤如图1所示,具体为:
第一步:以消息为参数创建AddMessageCommand,即将AddMessageCommand的message字段设为需要存储的消息;将RemoveMessageCommand中的messageId设为需要从存储中删除的消息标识符;
第二步:把AddMessageCommand对象序列化为字节流;
第三步:将字节流写入日志文件,如果设置为异步模式,则将多个写入操作合并,将每个写入操作需写入的字节流合并,一次性写入到日志文件中;
第四步:更新内存中的索引页,将消息标识符和消息对应于日志文件中的位置插入到索引树中的节点;
第五步:写回索引文件,将更新的索引树节点所对应的文件页以双写的方式写回到索引文件。
而读取步骤如图2所示,具体来说为:
第一步:查找消息在日志文件中的位置,通过消息标识符在索引树上查找其对应的日志文件位置信息。
第二步:反序列化,读取日志文件,将读到的字节流反序列化成AddMessageCommand对象。
第三步:读取消息,从AddMessageCommand对象中取出消息。
Claims (1)
1.一种基于文件系统的消息中间件持久消息的存储方法,其特征在于包括如下步骤:
第一步:以消息为参数创建AddMessageCommand,即将AddMessageCommand的message字段设为需要存储的消息;将RemoveMessageCommand中的messageId设为需要从存储中删除的消息标识符;
第二步:把AddMessageCommand对象序列化为字节流;
第三步:将字节流写入日志文件,如果设置为异步模式,则将多个写入操作合并,将每个写入操作需写入的字节流合并,一次性写入到日志文件中;
第四步:更新内存中的索引页,将消息标识符和消息对应于日志文件中的位置插入到索引树中的节点;
第五步:写回索引文件,将更新的索引树节点所对应的文件页以双写的方式写回到索引文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910230963XA CN101707633B (zh) | 2009-11-27 | 2009-11-27 | 一种基于文件系统的消息中间件持久消息的存储方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910230963XA CN101707633B (zh) | 2009-11-27 | 2009-11-27 | 一种基于文件系统的消息中间件持久消息的存储方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101707633A CN101707633A (zh) | 2010-05-12 |
CN101707633B true CN101707633B (zh) | 2012-08-22 |
Family
ID=42377821
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910230963XA Active CN101707633B (zh) | 2009-11-27 | 2009-11-27 | 一种基于文件系统的消息中间件持久消息的存储方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101707633B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102508765A (zh) * | 2011-11-17 | 2012-06-20 | 深圳市中兴移动通信有限公司 | 一种通过进程间通信实现软件日志实时监控的方法 |
CN102622407B (zh) * | 2012-01-29 | 2014-03-26 | 广州亦云信息技术有限公司 | 日志文件操作系统及日志文件管理方法 |
CN102868564A (zh) * | 2012-10-10 | 2013-01-09 | 山东中创软件商用中间件股份有限公司 | 一种消息持久化方法及系统 |
CN103607476B (zh) * | 2013-12-05 | 2017-05-17 | 上海普坤信息科技有限公司 | 海量消息的分布式多阶段持久化的系统及方法 |
CN104794119B (zh) * | 2014-01-17 | 2018-04-03 | 阿里巴巴集团控股有限公司 | 用于中间件消息的存储与传输方法及系统 |
CN105740083A (zh) * | 2016-01-28 | 2016-07-06 | 努比亚技术有限公司 | 消息处理方法、装置及系统 |
CN107295106B (zh) * | 2017-07-31 | 2020-08-14 | 杭州多麦电子商务股份有限公司 | 消息数据服务集群 |
CN110019001B (zh) * | 2017-08-17 | 2021-07-06 | 中国电信股份有限公司 | 提升消息中间件消息追踪能力的方法、系统和监控模块 |
CN110213317B (zh) * | 2018-07-18 | 2021-10-29 | 腾讯科技(深圳)有限公司 | 消息存储的方法、装置及存储介质 |
CN110209554B (zh) * | 2019-06-14 | 2023-08-11 | 上海中通吉网络技术有限公司 | 数据库日志分发方法、装置及设备 |
CN111049729A (zh) * | 2019-11-29 | 2020-04-21 | 苏州浪潮智能科技有限公司 | 一种持久化消息传输方法与装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1851672A (zh) * | 2006-04-05 | 2006-10-25 | 北京飞天诚信科技有限公司 | 一种闪存的安全读写方法 |
WO2007025831A1 (en) * | 2005-08-31 | 2007-03-08 | International Business Machines Corporation | A method for managing i/o |
-
2009
- 2009-11-27 CN CN200910230963XA patent/CN101707633B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2007025831A1 (en) * | 2005-08-31 | 2007-03-08 | International Business Machines Corporation | A method for managing i/o |
CN1851672A (zh) * | 2006-04-05 | 2006-10-25 | 北京飞天诚信科技有限公司 | 一种闪存的安全读写方法 |
Non-Patent Citations (2)
Title |
---|
华北.浅谈消息中间件技术的原理与应用.《中国科技信息》.2005,(第12期), * |
陈明,潘家铭,阎保平.消息中间件的设计与实现.《微电子学与计算机》.2005,(第4期), * |
Also Published As
Publication number | Publication date |
---|---|
CN101707633A (zh) | 2010-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101707633B (zh) | 一种基于文件系统的消息中间件持久消息的存储方法 | |
US7844643B2 (en) | Storage management system with integrated continuous data protection and remote copy | |
CN100578470C (zh) | 基于裸设备的音视频数据存取方法和装置 | |
CN103514106B (zh) | 一种数据缓存方法 | |
CN106951375B (zh) | 在存储系统中删除快照卷的方法及装置 | |
CN105183839A (zh) | 一种基于Hadoop的小文件分级索引的存储优化方法 | |
CN103595797B (zh) | 一种分布式存储系统中的缓存方法 | |
CN103838830A (zh) | 一种HBase数据库的数据管理方法及系统 | |
CN103246696A (zh) | 高并发数据库的访问方法及应用于多服务器系统的方法 | |
CN103226965B (zh) | 基于时间位图的音视频数据存取方法 | |
CN113377292B (zh) | 一种单机存储引擎 | |
KR20200056357A (ko) | 데이터베이스 관리 시스템에서의 변경 데이터 캡쳐 구현 기법 | |
KR20200056526A (ko) | 데이터베이스 관리 시스템에서의 변경 데이터 캡쳐 구현 기법 | |
CN102024060B (zh) | 存储文件及恢复误删除文件的方法 | |
US20080320062A1 (en) | Method of transferring file system, file system transference program, and file system transference device | |
CN113961153A (zh) | 一种索引数据写入磁盘的方法、装置及终端设备 | |
CN114281762A (zh) | 一种日志存储加速方法、装置、设备及介质 | |
CN103136215A (zh) | 存储系统的数据读写方法和装置 | |
CN111163297A (zh) | 一种实现视频监控云存储高并发和快速回放的方法 | |
CN103207916A (zh) | 元数据处理的方法和装置 | |
EP4174675A1 (en) | On-board data storage method and system | |
CN111241090B (zh) | 存储系统中管理数据索引的方法和装置 | |
CN105677579A (zh) | 缓存系统中的数据访问方法和系统 | |
CN111245933A (zh) | 一种基于日志的对象存储追加写实现方法 | |
CN103177026A (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 | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |