Skip to content

v2.4.0 — O(n) BackupJsonStreamParser

Latest

Choose a tag to compare

@MasyaSmv MasyaSmv released this 05 Aug 13:26

Исправлено

  • BackupJsonStreamParser переведён с посимвольного среза буфера (substr с головы на каждой строке) на чтение через integer-курсор с ленивой компактизацией раз на входной чанк. Сложность разбора снижена с O(n²) до O(n): стриминг реального бэкапа 387 МБ / 386k строк ускорился с 11+ минут до ~39 c при ограниченной памяти.

Добавлено

  • Параметр BackupJsonStreamParser::__construct(int $maxRecordSize) (по умолчанию 128 MiB) — защита от OOM на битом файле без разделителей.
  • Тест линейности парсера (N vs 2N) и edge-кейсы границ чанков/экранирования.