Почему форматы файлов фиксированной ширины все еще используются? - PullRequest
5 голосов
/ 05 октября 2011

Есть ли какие-либо преимущества в формате файлов с фиксированной шириной по сравнению с чем-то вроде XML?Я понимаю, что XML, вероятно, займет больше места на диске для хранения того же объема данных, но файл также может быть сжат.Я полагаю, что теоретически вы также можете прочитать конкретный фрагмент данных в зависимости от того, где он находится в файле (просто захватите эти байты).Но кроме этого, что еще?

Ответы [ 6 ]

22 голосов
/ 28 января 2012

Когда данные большие (гига / террабайты), файлы формата фиксированной ширины могут быть МНОГО более эффективными.

Поскольку каждая запись и поле имеют фиксированные размеры, вы можете простонайдите (например) n-миллионную строку и прочитайте оттуда пару записей.Вы также можете отобразить в памяти весь файл в память и получить довольно эффективный и простой произвольный доступ ко всему.

Файлы XML не подходят для этих случаев.

7 голосов
/ 05 октября 2011

XML сложен.И особенно если вы делаете проверку в соответствии со схемой.Это может не выглядеть важным, потому что кто-то другой уже написал парсер XML, который вы можете использовать.Но это добавляет довольно много обработки, а значит, занимает больше времени.Это может не быть проблемой во многих случаях, но иногда может.

Если вы хотите сохранить одно целое число в произвольном формате файла, это займет всего 4 байта, а когда вы хотите загрузить его, вы просто скопируете те4 байта в память (при условии, что формат файла и ваша платформа имеют одинаковый порядок байтов).Но с XML, это может занять что-то вроде 10-30 байтов.А загрузка это означает сравнение строк и разбор десятичных представлений целых чисел и, возможно, больше.

Опять же, эти различия в производительности и размерах хранилища могут быть слишком малы, чтобы вы даже могли их рассмотреть (и какую работу это потребует)разработать собственный формат может быть нетривиальным), но во многих случаях эти различия do имеют значение.

Например, я столкнулся с системой, которая использует SMS-сообщения для передачи некоторых данных.Это означает, что у вас есть 140 байтов (!) На сообщение.И устройство, которое отправляет и получает эти сообщения, не имеет ГБ памяти и ГГц ЦП.В этой ситуации вы убедитесь, что каждый бит имеет значение, и вы определенно не используете XML.

5 голосов
/ 26 января 2018

Я знаю, что это старая версия, но я ежедневно работаю с фиксированной шириной и XML.Вы можете суммировать это до:

XML = удобочитаемость

Фиксированная ширина = скорость и низкое потребление ресурсов

XML в значительной степени удобочитаем для человека.Мне все равно, что кто-нибудь говорит о структуре и валидации.Если вы работаете с системой, которая действительно не нуждается и должна иметь людей, читающих файлы, которые вы передаете туда и обратно, то вы просто добавляете это как накладные расходы к количеству времени, которое требуется для обработки файла и кразмер файла, влияющий на время, которое может занять файл для передачи его содержимого, а также другое влияние на обработку.Все это также повлияет на использование памяти системой, использующей файл XML.Однако у XML есть свои преимущества.Вы можете более свободно определить свою структуру.Иногда проще, если ваш файл и код не требуют, чтобы поле было длиной 255 символов.Только то, что ваш код загружает этот ограниченный период.Другое преимущество заключается в том, что XML может / должен иметь XML-схему, которая определяет требования к содержимому XML.Это помогает иметь несколько систем, которые используют один API.Если вы можете предоставить свою схему разработчику, он может довольно быстро превратить типизированные объекты, которые сериализуются в правильно отформатированный и структурированный XML.

Фиксированная ширина предназначена для скорости и минимального потребления ресурсов.Это может быть более утомительным для установки, чем XML.Обеспечение того, чтобы все системы знали точное положение «столбцов» в файле с фиксированной шириной.Часто не во всех системах используются одинаковые или все столбцы, поэтому в итоге получается только одна система, которая полностью понимает содержимое фиксированной ширины.Это может усложнить разработку API или системы с использованием содержимого переданных файлов.Однако, поскольку нет меток полей, нет тегов, нет ничего, кроме необработанных данных, вы часто можете получить меньшую посылку по сети.Не всегда верно, в некоторых случаях у вас может быть большое количество текстовых полей, которые обычно имеют небольшие объемы данных, хранящихся в полях, но должны сохранять большую ширину столбца для одного случая, когда была введена длина абзаца.Теперь у вас есть куча пустых пространств, содержащих позиции в вашем файле с фиксированной шириной, и XML может фактически уменьшить общий размер вашего пакета.

В общем, XML предназначен для удобства чтения.Обычно вы не можете просто взять файл с фиксированной шириной или даже файл CSV и сразу начать понимать, что означают данные.Там, где также можно пометить XML-файлы, вы можете это сделать.

Есть ряд преимуществ и недостатков, в которые я не вдавался, но именно здесь я вижу настоящее мясо и картошку различий.

2 голосов
/ 08 августа 2016

У меня тоже были такие же вопросы, пока я не осознал силу фиксированной ширины. У нас есть таблица, в которой миллионы записей извлекаются из них в файл, поскольку JSON увеличил размер файла до 15 ГБ и 2+ часа. При использовании исправленного widht уменьшил его до 6,5 ГБ и 15 минут.

Извлечение и запись фиксированной ширины быстрее, чем JSON.

Я тоже пробовал CSV, и даже здесь фиксированная ширина набрала больше очков.

2 голосов
/ 05 октября 2011

Вероятно, в основном по старым причинам, поскольку парсеры для XML, JSON (и т. Д.) Существуют практически на всех платформах.

Теоретически форматы фиксированной ширины могут быть более экономичными, как вы предлагаете;и читать немного проще.Но они не кажутся существенными преимуществами.

Для чего бы это ни стоило, табличные (но не фиксированной ширины) форматы, такие как CSV, имеют свое применение, сочетая немного более компактное представление и, возможно, лучшую читабельность;CSV очень хорошо работает для заданий на карту / уменьшенный стиль.

1 голос
/ 05 октября 2011

Одной из причин может быть такая обработка XML (не только чтение и загрузка в структуры памяти, но и анализ регулярного поиска в файле XML по сравнению с простым файлом с фиксированной шириной или с разделителями, или даже быстрое ручное исправление неверных данных). ) сложнее, чем файлы фиксированной ширины. Конечно, сейчас есть много библиотек, которые могут сделать это для вас, но если нет такой для платформы, на которой вы работаете, вы действительно хотите написать синтаксический анализатор XML или программу, которая просто читает n байтов в местоположении x ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...