Как обновить запись в хронической очереди? - PullRequest
2 голосов
/ 19 февраля 2020

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

    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);

1 Ответ

1 голос
/ 13 марта 2020

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

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

...