【问题标题】:kaha db message store for persistent messages用于持久消息的 kaha db 消息存储
【发布时间】:2012-09-30 17:35:08
【问题描述】:

我知道 db-xx.log 是日志文件,而 db.redo 是参考文件?

db-xx.log 存储尚未使用的消息。这些消息在被消费后将从 db-xx.log 中删除。 db.redo 按消息 ID 存储消息的引用(存储在 db-xx.log 中)。

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

我的理解是代理首先将消息存储在缓存(即易失性内存)中,然后当检查点或缓存大小已满时将这些消息移动(附加)到 db-xx.log。

  1. 正确吗?

谢谢

【问题讨论】:

    标签: java activemq message-queue persistent-data kahadb


    【解决方案1】:

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

    删除消息后,队列/主题的行为会有所不同。

    • 如果是队列,它将从索引文件中删除。 B-tree 结构将相应修改。
    • 如果是topic,只有当消息被所有subs确认后,才会被删除。

    【讨论】:

      【解决方案2】:

      db.data 包含引用未使用消息的 btree 页面。 db.redo 是即将对 db.data 执行的更新的重做日志。 db.free 跟踪 db.data 中的空闲页面。

      【讨论】:

      • 启动activemq时,没有看到db.free。只有在我停止activemq时才发现。我产生了数百万条消息,这些消息构成了许多 data-xx.log 文件和大 db.data 文件。当我消费所有消息时,除了最后一条之外,所有 data-xx.log 都被删除了,但为什么 db.data 保持不变(仍然是大文件)。有什么问题吗?
      • 我正在寻找这个问题的根源stackoverflow.com/questions/12725505/slow-kahadb-access
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-29
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 2014-02-05
      相关资源
      最近更新 更多