是否有一个轻量级的Chronicle Queue不使用骑行?

时间:2018-01-13 22:22:54

标签: chronicle chronicle-queue

我想使用Chronicle Queues作为用户消息的收件箱,我的应用程序的每个用户都有自己的队列。但是,我面临以下“问题”:

  1. 由于每个用户的消息数量不是很高,因此单个用户的所有消息都可以存储在单个队列文件中而无需循环。 如何禁用骑行?

  2. 如果可以禁用循环,可以将整个队列存储在单个文件中而不是包含单个队列文件的目录加上目录list.cq4t吗? / p>

  3. 在带有EXT4文件系统的Linux操作系统上,空队列使用83.9Mb的磁盘空间。 这可以减少到只占用内容的大小吗?

  4. 如果无法规避一个或多个给定问题,是否有其他方法可以实现具有Chronicle Queues的用户收件箱,如子队列或其他东西?

1 个答案:

答案 0 :(得分:3)

要减小文件的大小,可以减少队列使用的blockSize

try (final SingleChronicleQueue queue = SingleChronicleQueueBuilder.binary(tmpDir.newFolder()).
    blockSize(4096).
    build()) {

您可以将邮箱名称存储为每个事件的一部分:

try (final DocumentContext documentContext = 
    queue.acquireAppender().writingDocument()) {
    documentContext.wire().getValueOut().
    text("user@mailbox").writeText(email);
}

最后,如果你真的想要禁用循环行为,你可以为队列提供一个永不前进的时钟:

final AtomicLong fixedClock = new AtomicLong(System.currentTimeMillis());
try (final SingleChronicleQueue queue = SingleChronicleQueueBuilder.binary(tmpDir.newFolder()).
        timeProvider(fixedClock::get).
        blockSize(4096).
        build()) {

请注意,此操作模式不是受支持的用例。

目录列表文件是队列内部机制所必需的,因此没有它就无法使用队列。

确保在更改任何这些配置参数时执行测试。