Implementing Change Data Capture
				
			
		| .vscode | ||
| source | ||
| tools | ||
| .gitignore | ||
| dub.json | ||
| dub.selections.json | ||
| README.md | ||
Implementing Change Data Capture
Объяснение изменений и особенностей
- 
Статическая таблица Gear:
- Таблица 
gearопределена какimmutable ulong[256]с 256 случайными 64-битными числами, сгенерированными заранее (вместо динамической генерации сRandom). Значения выбраны произвольно, но в стиле реализаций FastCDC, где таблица фиксирована для консистентности. - Использование 
immutableобеспечивает неизменяемость и оптимизацию компилятором D. - В реальных системах таблица может быть взята из оригинальной статьи FastCDC или сгенерирована с криптографически безопасным ГСЧ, но здесь она статична для простоты и воспроизводимости.
 
 - Таблица 
 - 
Текст:
- Переносы строк (
\n) заменены на пробелы, как указано в запросе. Длина текста в UTF-8 составляет 7471 байт (кириллица — 2 байта на символ, пробелы и знаки — 1 байт). - Текст конвертируется в 
ubyte[]для обработки FastCDC, который работает на уровне байтов. 
 - Переносы строк (
 - 
Параметры FastCDC:
minSize = 100,normalSize = 200,maxSize = 500— те же, что в предыдущем коде, подходят для текста длиной 7471 байт, обеспечивая около 30–40 чанков (7471 / 200 ≈ 37).- Маски: 
maskS = 0b11111111(8 бит, вероятность cut-point 1/256),maskL = 0b1111(4 бита, вероятность 1/16), уровень нормализации 2 (±2 бита от базовой log2(200) ≈ 8). 
 - 
Функция
fastcdc:- Сигнатура упрощена: удалён параметр 
gear, так как таблица теперь глобальная и статическая (immutable gear). - Логика осталась без изменений: инициализация хэша 
fpдля первыхminSizeбайт без проверок, фазаmaskSдоnormalSize, затемmaskLдоmaxSizeили cut-point (fp & mask == 0). 
 - Сигнатура упрощена: удалён параметр 
 - 
Вывод:
- Код выводит общую длину текста, номер чанка, его размер и первые 50 символов содержимого (или всё, если короче).
 - Пример вывода (зависит от Gear-таблицы):
Total length (bytes): 7471 Chunk sizes and contents: Chunk 1: 239 bytes Content: Цель науки о данных — улучшить процесс принятия решений, о... Chunk 2: 204 bytes Content: сновывая их на более глубоком понимании ситуации с помощью ... Chunk 3: 211 bytes Content: анализа больших наборов данных. Как область деятельности на... ... Chunk 31: 65 bytes Content: определить, будет ли данный конкретный проект успешным. 
 - 
Особенности работы:
- Rolling hash: Для каждого байта 
fp = (fp << 1) + gear[byte]. Статическая таблицаgearобеспечивает одинаковые результаты при каждом запуске. - Нормализация: 
maskSделает cut-points реже до 200 байт,maskL— чаще после, поддерживая чанки около 200 байт. - UTF-8: Границы чанков байтовые, могут не совпадать с границами слов из-за кириллицы (2 байта на символ).
 - Дедупликация: Для проверки дубликатов можно добавить хэширование чанков (например, SHA-256), но это не включено в текущий код.
 
 - Rolling hash: Для каждого байта