ActiveMQ学习心得之ActiveMQ四种存储器分析

第一次写技术类博客,写的不好还请见谅,阅毕请使劲踩,用力蹬,多提拔,狂灌水……


最近在学习《ActiveMQ in action》原版,关于存储部分,在这里就不翻译原文了,网上有一些童鞋已经发过翻译的,以下内容100% pure 是自己的理解和分析,可能有不准确的地方,仅供参考,并欢迎指正。



上图是自己做的ppt里的一页,作为背景介绍。下面是正文。


ActiveMQ有四种存储器,下面分别介绍和分析各自的特点和优缺点。

1、KahaDB message store:是ActiveMQ的默认以及推荐的存储器,特点是基于文件、支持事务日志、可靠、可扩展、速度快等。重点讨论一下后两点。

可扩展体现在KahaDB支持其他三种存储器的外接扩展,也就是说可以同时用不止一种,这样可以取长补短,适合更广的应用场景,达到性能最佳。

速度快,书中也总结了3点:(1)快速的事务日志;(2)高度优化的消息ID索引;(3)在内存中的消息缓存。具体分析,消息直接添加在当前日志文件的尾部,所以存的快;用一个索引文件存储所有的destination,可谓高度优化;支持内存缓存也是必然,但在缓存回复策略上不如内存存储器。


2、AMQ message store:在基于文件、支持事务方面和KahaDB类似。不同之处如下:

优点:索引用的是hashbin(哈希桶,没有查到权威定义,可理解为哈希表),自然比KahaDBBtree索引要快,并且磁盘读写用的是nio,速度也快,所以用于消息吞吐量要求比较大的时候是最佳选择。(有的人把吞吐量理解成消息总数量其实不正确,应该是消息出入队的速率。)

缺点:对于每个destination都要建一个索引,所以不适于很多destination并发的场合,而这恰恰是KahaDB的优势,它可以支持最大10000queue的同时等待。


3、JDBC message store:默认的JDBC驱动是ApacheDerby,同时支持MySQLPostgreSQLOracleSQLServerSybaseInformixMaxDB主流的关系数据库。用三张表结构来存储消息,分别是ACTIVEMQ_MSGSACTIVEMQ_ACKSACTIVEMQ_LOCK。第二张表外键关联到第一张表,共同存储消息,第三张表用于锁定保证只有一个broker实例可以访问数据库。(关于Derby这里不作介绍,可自行查阅)


4、Memory message store:用于实时消息的缓存,只针对非持久订阅的消费者提供了5种订阅恢复策略,可以极大程度增强非持久订阅的可用性。也就是说对于持久订阅的消费者是用不到内存存储的。


以上是我的学习心得,有很多是自己的理解,不一定全部正确,希望感兴趣的童鞋们一起探讨。          


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值