В чем разница между идентификатором транзакции и идентификатором последовательности в записи распределенного журнала?

Я использовал распределенный журнал AsyncLogReader для чтения записей из потока распределенного журнала. я обнаружил, что для каждой записи журнала в потоке существует два порядковых номера, один из которых является идентификатором транзакции, а другой - идентификатором последовательности. Какой из них я должен использовать для отслеживания позиции чтения?

1 ответ

Решение

На основании ответа одного из авторов распределенного журнала в списке рассылки:

Короче говоря, идентификатор транзакции - это предоставленный приложением порядковый номер. Требуется быть неубывающим. Пользователи обычно используют либо метку времени, либо смещение (пока записано байтов) в качестве идентификатора транзакции, чтобы они могли использовать идентификатор транзакции для перемотки либо по времени, либо по смещению.

Идентификатор последовательности - это сгенерированный системой порядковый номер. Это указывает на то, что глобальная последовательность записи журнала в потоке. если вы знакомы с Raft https://raft.github.io/raft.pdf, он такой же, как и журнал *index * в Raft. Существует два типичных варианта использования идентификатора последовательности. Вы можете использовать идентификатор последовательности для определения количества записей между любыми двумя записями. Вы можете использовать идентификатор последовательности для проверки работоспособности в последовательности доставки.

Также есть объяснение на странице API http://distributedlog.io/api/core.html

Другие вопросы по тегам