Длина файла XML - PullRequest
       35

Длина файла XML

2 голосов
/ 16 апреля 2009

У меня есть XML-файл размером 31 ГБ. Мне нужно найти общее количество строк в этом файле. Я знаю, что команда wc -l даст мне то же самое. Однако выполнение этой операции занимает слишком много времени. Есть ли более быстрый механизм для определения количества строк в большом файле?

Ответы [ 6 ]

6 голосов
/ 16 апреля 2009

31 гига - это действительно большой текстовый файл. Могу поспорить, что это снизит до 1,5 гигабайт. Я хотел бы сначала создать эти файлы в сжатом формате, а затем вы можете передавать распакованную версию файла через wc. Это значительно сократит количество операций ввода-вывода и памяти, используемых для обработки этого файла. gzip может читать и записывать сжатые потоки.

Но я бы также сделал следующие комментарии:

  • Номера строк не очень информативны для XML, так как пропуски между элементами игнорируются (за исключением смешанного содержимого). Что вы действительно хотите знать о наборе данных? Могу поспорить, что подсчет элементов был бы более полезным.
  • Убедитесь, что ваш XML-файл не является излишне избыточным, например, повторяете ли вы одни и те же объявления пространства имен по всему документу?
  • Возможно, XML не лучший способ представить этот документ, если попытаться рассмотреть что-то вроде Fast Infoset
4 голосов
/ 16 апреля 2009

если вам нужно только количество строк, wc -l будет так же быстро, как и все остальное.

Проблема в текстовом файле объемом 31 ГБ.

3 голосов
/ 16 апреля 2009

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

2 голосов
/ 16 апреля 2009

Это выходит за рамки того, что код должен быть реорганизован, чтобы полностью избежать вашей проблемы. Один из способов сделать это - поместить все данные в файле в базу данных хранилища кортежей. Apache couchDB и Intersystems Cache - это две системы, которые вы можете использовать для этого, и они будут гораздо лучше оптимизированы для типа данных, с которыми вы имеете дело.

Если вы действительно застряли с XML-файлом, тогда другой вариант - подсчитать все строки заранее и кэшировать это значение. Каждый раз, когда строка добавляется или удаляется из файла, вы можете добавить или вычесть одну из файла. Кроме того, убедитесь, что вы используете 64-битное целое число, поскольку оно может содержать более 2 ^ 32 строк.

1 голос
/ 16 апреля 2009

Разве подсчет строк не является достаточно неопределенным, поскольку в XML перевод строки в основном просто косметическая вещь? Вероятно, было бы лучше подсчитать количество вхождений определенного тега.

1 голос
/ 16 апреля 2009

Нет, не совсем. wc будет довольно хорошо оптимизировано. 31 ГБ - это много данных, и чтение их для подсчета строк займет некоторое время, независимо от того, какую программу вы используете.

Кроме того, этот вопрос не совсем подходит для переполнения стека, поскольку он вообще не касается программирования.

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