LevelDB持久性适配器使用LevelDB作为高性能的消息存储。它是一个基于文件的存储库,它使用了Google的LevelDB,将索引保存到包含消息的日志文件中。它经过优化,提供了比KahaDB更快的持久性。它类似于KahahDB,但是它没有使用自定义的b树实现来索引写前日志,而是使用基于LevelDB的索引,由于“append only”文件访问模式,这些索引具有一些很好的属性:

  • 快速更新(不需要进行随机磁盘更新)
  • 并发读取
  • 使用硬链接的快速索引快照

KahaDB和LevelDB存储都必须进行周期性的垃圾收集,以确定可以删除哪些日志文件。在KahaDB的情况下,这可能非常昂贵,因为您增加了存储的数据量,并且在收集发生时可能导致读/写停止。LevelDB存储使用一种便宜得多的算法来确定何时可以收集日志文件并避免这些停顿。

LevelDB的主要优势有:

  • 更高的持久吞吐量
  • broker重启时恢复时间更快
  • 支持并发的读访问
  • 在垃圾回收周期中不会暂停
  • 使用较少的读取IO操作来加载存储的消息
  • 支持XA事务
  • 检查重复的消息
  • 通过JMX暴露公开状态以进行监控
  • 支持复制

在ActiveMQ中配置使用LevelDB作为持久化存储方案实际上很简单,使用主配置文件中的persistence Adapter标记就可以完成。最简配置如下所示:

......
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
......
<persistenceAdapter>
<levelDB directory="${activemq.data}/levelDB"/>
</persistenceAdapter>
......
</broker>
......

以上示例配置中,directory属性表示LevelDB的结构文件所放置的目录位置。请注意,由于log文件是顺序写的机制,所以log文件也会预占磁盘空间,并且log文件默认的大小就是100MB。那么只要生成一个log文件,就至少会占据100MB的存储空间(但这不代表总的已使用量)。也就是说,如果您将主配置文件中storeUsage标记的limit属性设置为200mb,那么透过ActiveMQ管理界面看到的现象就是:只要有任何一条PERSISTENT Message被接受,Store percent used立刻就会变成50%。如果您将storeUsage标记的limit属性为100mb,那么只要有任何一条PERSISTENT Message被接受,ActiveMQ服务端的Producer Flow Control策略就会立刻开始工作。

所以一定不要吝啬分配memoryUsage、storeUsage。依据您的团队在生产环境下的存储方案,也可以通过logSize属性改变LevelDB中单个log文件的大小。如下示例:

......
<!-- 限制大小为50mb -->
<persistenceAdapter>
<levelDB directory="${activemq.data}/levelDB" logSize="52428800"/>
</persistenceAdapter>
......

默认的LevelDB存储策略中,当ActiveMQ接收到一条消息后,就会同步将这条消息写入到log文件中,并且同时在内存区域向Memtable写入位置索引。通过配置您也可以将这个过程改为“异步”:

......
<!-- 改为异步写log文件 -->
<persistenceAdapter>
<levelDB directory="${activemq.data}/levelDB" logSize="52428800" sync="false"/>
</persistenceAdapter>
......

以下列表展示了您可以使用的LevelDB的配置属性,使用“*”标识出来的属性是笔者认为重要的配置项:

关于LevelDB 详细请参加官网:http://activemq.apache.org/replicated-leveldb-store.html

Activemq特性之持久化--LevelDB特性的更多相关文章

  1. Redis数据库高级实用特性:持久化机制

    Redis数据库高级实用特性:持久化机制 大型web系统数据缓存设计 Redis高级特性:虚拟内存的使用技巧 Redis高级实用特性:安全性与主从复制 Memcached.Redis OR Tair

  2. ActiveMQ的消息持久化机制

    为了避免意外宕机以后丢失信息,需要做到重启后可以恢复消息队列,消息系统一般都会采用持久化机制. ActiveMQ的消息持久化机制有JDBC,AMQ,KahaDB和LevelDB,无论使用哪种持久化方式 ...

  3. ActiveMQ消息的持久化策略

    持久化消息和非持久化消息的存储原理: 正常情况下,非持久化消息是存储在内存中的,持久化消息是存储在文件中的.能够存储的最大消息数据在${ActiveMQ_HOME}/conf/activemq.xml ...

  4. Atitit python3.0 3.3 3.5 3.6 新特性 Python2.7新特性1Python 3_x 新特性1python3.4新特性1python3.5新特性1值得关注的新特性1Pyth

    Atitit python3.0 3.3 3.5 3.6 新特性 Python2.7新特性1 Python 3_x 新特性1 python3.4新特性1 python3.5新特性1 值得关注的新特性1 ...

  5. [C#]Attribute特性(2)——方法的特性及特性参数

    上篇博文[C#]Attribute特性介绍了特性的定义,类的特性,字段的特性,这篇博文将介绍方法的特性及特性参数相关概念. 3.方法的特性 之所以将这部分单列出来进行讨论,是因为对方法的特性查询的反射 ...

  6. 11g新特性与12c新特性

    1. 11g新特性概图 管理新特性> 开发新特性> 2. 12c 新特性概图

  7. 代码走查25条疑问 C# 跳转新的标签页 C#线程处理 .Net 特性 attribute 学习 ----自定义特性 看懂 ,学会 .NET 事件的正确姿势-简单版

    代码走查25条疑问   代码走查(Code Review) 是一个开发人员与架构师集中讨论代码的过程.通过代码走查可以提高代码的 质量,同时减少Bug出现的几率.但是在小公司中并没有代码走查的过程在这 ...

  8. Git使用总结 Asp.net生命周期与Http协议 托管代码与非托管代码的区别 通过IEnumerable接口遍历数据 依赖注入与控制反转 C#多线程——优先级 AutoFac容器初步 C#特性详解 C#特性详解 WPF 可触摸移动的ScrollViewer控件 .NET(C#)能开发出什么样的APP?盘点那些通过Smobiler开发的移动应用

    一,原理 首先,我们要明白Git是什么,它是一个管理工具或软件,用来管理什么的呢?当然是在软件开发过程中管理软件或者文件的不同版本的工具,一些作家也可以用这个管理自己创作的文本文件,由Linus开发的 ...

  9. Atitit.业务系统的新特性 开发平台 新特性的来源总结

    Atitit.业务系统的新特性 开发平台 新特性的来源总结 1.1. 语言新特性(java c# php js python lisp c++ oc swift ruby  go dart1 1.2. ...

随机推荐

  1. 《PHP程序员面试笔试宝典》——如何进行自我介绍?

    本文摘自<PHP程序员面试笔试宝典> PHP面试技巧分享,PHP面试题,PHP宝典尽在"琉忆编程库". 自我介绍是面试中至关重要的一个步骤,很多面试官对求职者提出的第一 ...

  2. Solution -「UOJ #46」玄学

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\) 和 \(q\) 次操作,操作内容如下: 给出 \(l,r,k,b\),声明一个修改方案,表示 ...

  3. Ultra Math Preview : VSCode上的LaTeX公式实时预览插件

    一直觉着 VS Code 的 TeX 公式(包括 markdown 和 LaTeX)只能在定界符上hover预览,或者开一个预览面板看,没有那种像 Typora 一样紧跟在公式后面的预览面板,多少有些 ...

  4. 一文带你解读Spring5源码解析 IOC之开启Bean的加载,以及FactoryBean和BeanFactory的区别。

    前言 通过往期的文章我们已经了解了Spring对XML配置文件的解析,将分析的信息组装成BeanDefinition,并将其保存到相应的BeanDefinitionRegistry中,至此Spring ...

  5. Mybatis获取自增主键的两种方式

    <insert id="saveOne" parameterType="com.buwei.entity.User" > INSERT into u ...

  6. Linux系列——挂载Windows虚拟文件夹到Linux系统

    ​ 在windows操作系统上安装多台Linux虚拟机,需要方便的在windows系统和虚拟机上的Linux系统进行文件拷贝. 需要用到共享虚拟文件夹技术,将windows文件夹挂载到linux系统中 ...

  7. curl常用参数详解及示例

    curl简介 curl是一个开源的命令行工具,它基于网络协议,对指定URL进行网络传输,得到数据后不任何具体处理(如:html的渲染等),直接显示在"标准输出"(stdout)上. ...

  8. 快速搭建一套k8s集群环境

    参考官网 kubeadm是官方提供的快速搭建k8s集群的开源工具,对于非运维人员学习k8s,kubeadm方式安装相对更简单. kubeadm创建一个集群:https://kubernetes.io/ ...

  9. DoS泛洪测试与防御

    实验目的 DoS泛洪测试与防御 实验内容 DoS泛洪测试与防御 实验环境描述 1. 学生机与实验室网络直连: 2. VPC1与实验室网络直连: 3. 学生机与VPC1物理链路连通: 实验步骤 学生登录 ...

  10. 实例演示:Excel实现数据更新获取,并根据公式计算后展示

    ​ 我们数据库中有一些明细数据,希望我们可以使用Excel的公式,对报表数据进行,最后展示在自定义的行列固定报表中. 如下图:从左侧表中获取大类名称为饮料.海鲜.日用品,从2016/11/11到201 ...