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 存储 此存储的扩展版本,它会自行复制到其他代理节点以提高消息可用性。