Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.
Файл потока
Файл потока .ss - это один журнал на диске для всех ключей потока: заголовок, сообщения в
кадрах, маяк на каждом интервале и необязательная метка конца потока.
Схема текстом
- orders.ss: Заголовок, 128 байт интервал маяков; Сообщение orders, номер 1; Сообщение receipts, номер 1; Сообщение orders, номер 2; Маяк на каждом интервале; orders 2, продолжение; Метка конца потока если задана
- Одно сообщение: Ключ потока длина и имя; Шард, номер, время в мс; Размер нагрузки; Полезная нагрузка; Контрольная сумма; 0x0D
- Сообщение orders, номер 1 → Одно сообщение
- Все ключи потока делят файл, у каждого нумерация с единицы, все на шарде 0
Файл открывается заголовком длиной 128 байт. В нём хранятся байты Ss, версия формата, имя
файла, время создания и интервал маяков.
Дальше идут сообщения в порядке записи, независимо от ключа потока. Каждое несёт свой ключ, шард,
порядковый номер и метку времени в миллисекундах, затем полезную нагрузку и контрольную сумму.
Числа записаны в порядке big-endian, а каждый кадр закрывает байт 0x0D, поэтому файл с текстовой
полезной нагрузкой можно читать в редакторе.
Ключ потока нумеруется с единицы. Следующее соединение, которое дописывает в тот же файл, продолжает нумерацию. Этот клиент пишет каждое сообщение в шард ноль.
Маяк стоит на каждом кратном интервала маяков, по умолчанию 1 МиБ. Он записывает для каждого ключа потока заголовок последнего сообщения и накопленную контрольную сумму, поэтому служит индексом внутри файла. Читатель, попавший в середину файла, выравнивается по следующему маяку, а перемотка сужает поиск по маякам. Сообщение, которое пересекает интервал, разделяется, и маяк стоит между двумя его частями.
end_with_eos при завершении работы пишет сообщение
конца потока под внутренним ключом клиента с полезной нагрузкой EOS. Живая подписка на нём
заканчивается, и воспроизведение на нём завершается.
Файл, в котором пока ничего нет, при подключении брокера получает одно сообщение под ключом
ruststream-internal. Клиент не может открыть живой консьюмер на файле без содержимого, а этот
ключ не читает ни одна подписка.
Ключ потока - это от 1 до 249 символов: латинские буквы и цифры ASCII, ., _ и -. Клиент
перестаёт писать в файл на 16 ГиБ: публикация, которая достигает предела, возвращает ошибку, и
каждая следующая публикация в этот файл тоже.
Формат принадлежит sea-streamer-file
(формат файла,
клиент). Как клиент читает
файл, показывает страница Чтение, а как пишет - страница Запись.