Implementing Change Data Capture
Find a file
2025-09-08 17:43:36 +03:00
.vscode init 2025-09-04 21:51:23 +03:00
source Убрано лишнее 2025-09-08 17:43:36 +03:00
tools Разбивка текста на чанки 2025-09-08 01:08:37 +03:00
.gitignore init 2025-09-04 21:51:23 +03:00
dub.json Разбивка текста на чанки 2025-09-08 01:08:37 +03:00
dub.selections.json init 2025-09-04 21:51:23 +03:00
README.md Разбивка текста на чанки 2025-09-08 01:08:37 +03:00

Implementing Change Data Capture

Объяснение изменений и особенностей

  1. Статическая таблица Gear:

    • Таблица gear определена как immutable ulong[256] с 256 случайными 64-битными числами, сгенерированными заранее (вместо динамической генерации с Random). Значения выбраны произвольно, но в стиле реализаций FastCDC, где таблица фиксирована для консистентности.
    • Использование immutable обеспечивает неизменяемость и оптимизацию компилятором D.
    • В реальных системах таблица может быть взята из оригинальной статьи FastCDC или сгенерирована с криптографически безопасным ГСЧ, но здесь она статична для простоты и воспроизводимости.
  2. Текст:

    • Переносы строк (\n) заменены на пробелы, как указано в запросе. Длина текста в UTF-8 составляет 7471 байт (кириллица — 2 байта на символ, пробелы и знаки — 1 байт).
    • Текст конвертируется в ubyte[] для обработки FastCDC, который работает на уровне байтов.
  3. Параметры FastCDC:

    • minSize = 100, normalSize = 200, maxSize = 500 — те же, что в предыдущем коде, подходят для текста длиной 7471 байт, обеспечивая около 3040 чанков (7471 / 200 ≈ 37).
    • Маски: maskS = 0b11111111 (8 бит, вероятность cut-point 1/256), maskL = 0b1111 (4 бита, вероятность 1/16), уровень нормализации 2 (±2 бита от базовой log2(200) ≈ 8).
  4. Функция fastcdc:

    • Сигнатура упрощена: удалён параметр gear, так как таблица теперь глобальная и статическая (immutable gear).
    • Логика осталась без изменений: инициализация хэша fp для первых minSize байт без проверок, фаза maskS до normalSize, затем maskL до maxSize или cut-point (fp & mask == 0).
  5. Вывод:

    • Код выводит общую длину текста, номер чанка, его размер и первые 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: определить, будет ли данный конкретный проект успешным.
      
  6. Особенности работы:

    • Rolling hash: Для каждого байта fp = (fp << 1) + gear[byte]. Статическая таблица gear обеспечивает одинаковые результаты при каждом запуске.
    • Нормализация: maskS делает cut-points реже до 200 байт, maskL — чаще после, поддерживая чанки около 200 байт.
    • UTF-8: Границы чанков байтовые, могут не совпадать с границами слов из-за кириллицы (2 байта на символ).
    • Дедупликация: Для проверки дубликатов можно добавить хэширование чанков (например, SHA-256), но это не включено в текущий код.