2012-10-10 73 views
1

我知道db-xx.log是日志文件和db.redo是参考文件?卡哈db消息存储持久性消息

db-xx.log存储尚未被使用的消息。这些消息在消耗后将从db-xx.log中删除。 db.redo通过消息ID存储消息的参考(存储在db-xx.log中)。

  1. 但是,什么是db.data和db.free?
  2. 它们的功能是什么?

我的理解是代理存储在高速缓存中的消息(这是易失性存储器)第一,然后将这些消息被移动(附加)到DB-xx.log当检查点或高速缓存大小已满。

  1. 这是正确的吗?

由于

回答

5

db.data保持引用该未使用的消息B树页。 db.redo是即将针对db.data执行的更新的重做日志。 db.free跟踪db.data中的空闲页面。

+0

当我启动activemq时,我没有看到db.free。只有当我停止activemq时才会发现它。我生成了数百万条消息,这些消息生成了许多数据-xx.log文件和大型db.data文件。当我使用所有消息时,除了最后一个消息之外,所有的data-xx.log都被删除了,但为什么db.data保持不变(仍然是大文件)。有什么不对的吗? –

+0

我想找到这个问题的来源http://stackoverflow.com/questions/12725505/slow-kahadb-access –

2

db.redo是索引(db.data)的恢复文件。 在启动activemq期间,db.free被读取并加载到内存中。一旦空闲列表被加载到内存中,该文件将被删除。一旦消息数据库被卸载,空闲列表被写回到db.free。

一旦消息被删除,行为对于队列/主题是不同的。

  • 如果是队列,它将从索引文件中删除。 B树结构将相应地修改。
  • 在主题的情况下,只有当消息被所有潜艇承认时,它才会被移除。