Figure 2.3. KahaDB Architecture
B-tree index的设计是为了更快的把消息从日志文件中恢复出来,它包含一个指向日志文件中消息存储的位置的指针。完整的B-tree index存储在磁盘上,并且部分B-tree index被加载到内存中的缓存里面。显而易见的是如果B-tree index被全部加在到缓存中的话,那么效率会更高。
配置示例:
下面的示例演示了如何配置Broker使用kahadb存储,增加一个persistenceAdapter项,包含kahaDB元素。
其中directory
指定了kahadb的存储位置,journalMaxFileLength
指定了日志文件的大小。
性能调优:你可以调整下面的几个选项来优化kahadb的性能。
indexCacheSize
- (默认为10000
) 设定缓存页的个数(一页默认情况下是4 KB),一般来说缓存的大小尽可能的设置大一些,以避免内存不足时频繁的交换。根据你的元数据文件(db.data
)来获得更多的灵感来设定缓存的大小。indexWriteBatchSize
—(default 1000
) 设置脏索引(dirty indexe)(译者注:脏索引的个人理解是cache中的index和message store中的index状态不一样的都称为dirty)达到多少之后,就需要把索引存储起来。如果你想最大化broker的速度,那么就把这个值设置的尽可能的大一些,这样的话,仅会在到达checkpoint的时候,索引才会被存储起来。但是这样会增大系统出错的时候,丢失大量的元数据的风险。(导致borker重启的时候会非常慢)journalMaxFileLength
—(default 32mb
) 当broker的吞吐量特别大的时候,日志文件会很快被写满,这样会因为频繁的关闭文件,打开文件而导致性能低下。你可以通过调整文件的size,减少文件切换的频率,从而获得轻微的性能改善。enableJournalDiskSyncs
—(default true
)通常,broker会在给producer确认之前,把消息同步到磁盘上(并且确保消息物化到磁盘上)。你可以通过设置这个选项为false,从而获得本质的性能改善。但是这样的话,多少会的降低broker的可靠性。Warning:如果你需要满足JMS持久化的要求,并且确信你不想丢失数据化话,请不要关闭这个选项。