Сбросить лишний вес Заметка
The Daily WTF на русском

Сбросить лишний вес

Базы данных в виде плоских файлов, распространенные на мейнфреймах, хранят данные в полях фиксированной ширины. Типичная запись, например "JOHN SMITH 12343rd St", предполагает, что "JOHN" занимает 8 символов, "SMITH" — 8, и так далее. Такая жесткая структура делает модификации, например добавление второй буквы имени, чрезвычайно сложными, часто требующими создания новой таблицы, миграции данных и обновления всего использующего программного обеспечения.Чтобы смягчить это, умные разработчики ввели "дополнение" (padding), резервируя дополнительные символы в записи. Например, запись может заканчиваться 16 символами неиспользуемого пространства. Когда требуется новое поле, например вторая буква имени, его можно вставить, уменьшив дополнение, избегая изменений общей длины записи. Этот метод, хотя и неэлегантный, предотвращает дорогостоящие переделки схемы и перемещение данных.Дополнение часто распределяется по всей записи, позволяя новым столбцам занимать эти зарезервированные пространства. Хотя со временем дополнение может закончиться, эта стратегия значительно продлевает срок службы схемы плоских файлов без крупных переработок.Команда Бренды поддерживала мейнфрейм-систему, использующую такие плоские файлы VSAM, что требовало извлечения данных в современную реляционную СУБД. Был создан процесс ETL, а команда мейнфрейма предоставила "копибук" с описанием структуры файла.Однако разработчики ETL неправильно обработали дополнение, разделив поля таким образом, что части дополнения были восприняты как отдельные элементы данных. Поначалу это казалось безобидным, поскольку символы дополнения удалялись из отчетов, а реконструкция работала путем конкатенации полей.Критическая ошибка заключалась в тестировании только на производственном мейнфрейме, где отсутствовали функции, использующие дополнение "на лету". Когда эти функции были запущены на производственном мейнфрейме, отчеты, сгенерированные процессом ETL, оказались испорчены посторонними данными из теперь используемого дополнения.Поскольку разработчики ETL были подрядчиками, а их решение "работало как задумано" на основе их ограниченного тестирования, они отказались его переделывать. В результате команда мейнфрейма была вынуждена искать альтернативные поля дополнения, чтобы не повлиять на существующие отчеты.