2016年4月7日星期四

ActiveMQ_027:LevelDB 原理

1. LevelDB 存储
LevelDB 是一个基于文件的消息持久化方式。经过优化后,它比 KahaDB 更快。与 KahaDB 原理类似,不过它使用的是一个定制化的 B-Tree 去索引 write ahead 日志文件,它提供了一些属性,用以提高“append only”追加模式的性能。
(1)Fast updates (No need to do random disk updates)
(2)Concurrent reads
(3)Fast index snapshots using hard links

KahaDB 和 LevelDB 都定期进行文件扫描,搜集可以删除的消息日志文件,然后再将其删除。使用KahaDB时,当消息日志文件很多时,搜集行为可能会导致消息的读写“失速”。而 LevelDB 使用了更简单的算法来判断哪个消息日志文件可以被删除,从而避免了消息的读写“失速”。

2. LevelDB 属性介绍
(1)directory 存储消息日志文件的目录,默认值:LevelDB。
(2)sync 如果设为 false, 将不同步进行写入操作到磁盘,默认值:true。
(3)logSize 最大消息日志文件大小,默认值:104857600 (100 MB)
(4)verifyChecksums 如果设为 true,将强制检查 checksum,默认值:false。
(5)paranoidChecks 发现文件内部有损坏时立即报错,默认值:false。
(6)indexFactory 用来创建 LevelDB indexes 的工厂类,默认值:org.fusesource.leveldbjni.JniDBFactory, org.iq80.leveldb.impl.Iq80DBFactory
(7)indexMaxOpenFiles 索引可以打开的最大文件数量,默认值:1000。
(8)indexBlockRestartInterval Number keys between restart points for delta encoding of keys,默认值:16。
(9)indexWriteBufferSize 可以放到缓存中的索引大小,超过此值,将会写入磁盘,默认值:6291456 (6 MB)。
(10)indexBlockSize The size of index data packed per block,默认值:4096 (4 K)。
(11)indexCacheSize The maximum amount of off-heap memory to use to cache index blocks,默认值:268435456 (256 MB)。
(12)indexCompression index blocks 的压缩类型,可以为 snappy 或 none,默认值:snappy。
(13)logCompression 消息日志文件的压缩类型,可以为 snappy 或 none,默认值:none。

参考文献:
1. http://activemq.apache.org/leveldb-store.html

没有评论: