Как обновить запись в очереди хроники?

Я хочу обновить запись по определенному индексу. Мой код не сработал. Спасибо вам всем

    appender.writeBytes(Bytes.wrapForRead("1234".getBytes()));
    long index = tailer.index();        
    DocumentContext dc = tailer.readingDocument();
    Wire wire = dc.wire();
    Bytes<?> bytes = wire.bytes();
    LOG.info("Before change {}", bytes);
    wire.clear();
    wire.writeBytes(b -> {
        b.write("ccccc".getBytes());
    });
    index = tailer.index() - 1;
    tailer.moveToIndex(index);
    DocumentContext dc2 = tailer.readingDocument();     
    Wire wire2 = dc2.wire();
    Bytes<?> bytes2 = wire2.bytes();
    LOG.info("After Change {}", bytes2);

person dragun    schedule 19.02.2020    source источник


Ответы (1)


Нет возможности редактировать запись в очереди хроник. Вы можете добавлять данные только в конце. Это преднамеренный выбор дизайна, который позволяет сделать множество оптимизаций.

Просто для примера: записи в очереди записываются в виде потока байтов, один за другим. Если мы разрешим редактирование, то любое редактирование, изменяющее длину записи, потребует смещения всех записей, следующих за редактируемой, что крайне неэффективно.

person Dmitry Pisklov    schedule 13.03.2020