目前我们正在使用 KahaDB 存储在 ActiveMQ 中进行消息持久性,到目前为止效果很好。
根据 ActiveMQ5.6 的发行说明,LevelDB
提供增强的性能。
有没有人试过usign LevelDB,如果是的话,你能提供利弊吗?
5 回答
仅供参考:这是ActiveMQ LevelDB 存储的官方文档的链接
缺点:
- 这是一家全新的商店,所以可能仍然存在一些错误。
- LevelDB 索引偶尔需要“压缩”,这可能会阻止新的写入。
- 您不能像使用 KahaDB 一样删除索引并从数据文件中重建它
- KahaDB 更优雅地处理磁盘损坏,尽可能恢复并丢弃损坏的记录。
优点:
- 附加大部分磁盘访问模式可提高旋转磁盘的性能。
- 磁盘同步次数少于 KahaDB
- 每条存储的消息需要插入更少的索引条目
- 将消息从磁盘加载到内存所需的索引查找更少
- 使用 Snappy 压缩来减少索引条目的磁盘大小
- 数据日志的可选 Snappy 压缩。
- 发送到复合目标仅将消息存储在磁盘上一次。
- 更快、更频繁的数据文件 GC。
- 有一个“复制”变体,它可以自我复制到“从”代理,以确保消息级别的 HA。
我们已经在 NFS 上使用了两个月的 levelDB 存储(配置了标准文件锁定故障转移)。在过去的几周里,我们已经多次损坏存储,日志中没有错误......只是队列堆积,吞吐量非常低。要解决这个问题,我们唯一能做的就是扔掉商店,重新开始。
所以我们现在再次切换回旧的可靠的 KahaDB 存储。
请参阅此链接:https ://github.com/fusesource/fuse-extra/tree/master/fusemq-leveldb#how-to-use-with-activemq-56 leveldb 与 kahadb 有一个小的比较。
我目前正在一个具有高消息吞吐量的系统上尝试它,并且我已经看到了更好的结果。我仍然需要看看它是否稳定,但到目前为止还不错。
为 LevelDB 做出的大多数性能声明似乎都是空洞的声明。它应该支持高并发读取,但多线程测试显示没有并发增益。https://github.com/ayende/raven.voron/pull/9#issuecomment-29764803
(相比之下,LMDB 显示了跨多个 CPU 读取的完美线性性能提升。https://github.com/ayende/raven.voron/pull/9#issuecomment-29780359)
我对 AMQ 性能进行了广泛的测试,在我的测试中无法获得 LevelDB 与 KahaDB 之间的任何统计显着差异:http ://whywebsphere.com/2015/03/12/ibm-mq-vs-apache-activemq-性能比较更新/