LevelDB 存储

警告

LevelDB 存储已从生产环境中移除。此页面仅作为先前版本的存档页面。请使用 KahaDB 代替。

版本兼容性

在 ActiveMQ Classic 5.8.0 中可用,但从 5.14.2 开始不再受支持,并在 5.17.0 中移除。

LevelDB 存储是一个基于文件的持久化数据库,它位于使用它的消息代理的本地。它经过优化,可以提供比 KahaDB 甚至更快的持久化速度。它类似于 KahahDB,但它不使用自定义的 B 树实现来索引预写日志,而是使用 LevelDB 基索引,由于“仅追加”文件访问模式,它具有一些很好的属性。

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

KahaDB 和 LevelDB 存储都必须执行周期性垃圾收集循环来确定哪些日志文件可以删除。在 KahaDB 的情况下,随着存储的数据量的增加,这可能会非常昂贵,并且在收集期间会导致读/写停顿。LevelDB 存储使用更便宜的算法来确定何时可以收集日志文件,并避免这些停顿。

配置

您可以将 ActiveMQ Classic 配置为使用 LevelDB 作为其持久化适配器,如下所示。

  <broker brokerName="broker" ... >
    ...
    <persistenceAdapter>
      <levelDB directory="activemq-data"/>
    </persistenceAdapter>
    ...
  </broker>

LevelDB 属性

属性名称 默认值 注释
directory LevelDB 存储将用来保存其数据文件的目录。如果目录不存在,存储将创建它。
sync true 如果设置为 false,则存储不会将日志记录操作同步到磁盘。
logSize 104857600 (100 MB) 每个数据日志文件在日志文件轮换发生之前的最大大小(以字节为单位)。
verifyChecksums false 设置为 true 强制对从文件系统读取的所有数据进行校验和验证。
paranoidChecks false 如果检测到内部损坏,则使存储尽快出错。
indexFactory org.fusesource.leveldbjni.JniDBFactory, org.iq80.leveldb.impl.Iq80DBFactory 创建 LevelDB 索引时要使用的工厂类。
indexMaxOpenFiles `1000 索引可以使用打开的文件数量。
indexBlockRestartInterval 16 用于密钥的增量编码的重启点之间的密钥数量。
indexWriteBufferSize 6291456 (6 MB) 在转换为磁盘上的排序文件之前,要在内存中累积的索引数据量。
indexBlockSize 4096 (4 K) 每个块中打包的索引数据的大小。
indexCacheSize 268435456 (256 MB) 用于缓存索引块的非堆内存的最大数量。
indexCompression snappy 要应用于索引块的压缩类型。可以是 snappy 或 none。
logCompression none 要应用于日志记录的压缩类型。可以是 snappy 或 none。

要调整锁定属性,请查看 可插拔存储锁

另请参阅

  • 复制的 LevelDB 存储 此存储的扩展版本,它会自行复制到其他代理节点以提高消息可用性。

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛徽标和 Apache ActiveMQ 项目徽标是 Apache 软件基金会的商标。版权所有 © 2024,Apache 软件基金会。根据 Apache 许可证 2.0 授权。