Нужен способ отсортировать файл журнала размером 100 ГБ по дате [закрыто]

Итак, по какой-то странной причине я получаю несортированный файл журнала размером 100 ГБ ( на самом деле он частично отсортирован ), а алгоритмы, которые я пытаюсь применить требуют отсортированные данные. Строка в файле журнала выглядит так

data  data data more data

У меня есть доступ к C # 4.0 и около 4 ГБ оперативной памяти на моей рабочей станции. Я могу предположить, что здесь лучше всего было бы какое-то слияние, но если не считать самой реализации этих алгоритмов - я хочу спросить, есть ли какой-то ярлык, который я мог бы предпринять.

Между прочим, анализ строки даты с помощью DateTime.Parse () работает очень медленно и занимает много времени процессора - скорость пыхтения составляет жалкие 10 МБ / с. Есть ли более быстрый способ, чем следующий?

    public static DateTime Parse(string data)
    {            
        int year, month, day;

        int.TryParse(data.Substring(0, 4), out year);
        int.TryParse(data.Substring(5, 2), out month);
        int.TryParse(data.Substring(8, 2), out day);

        return new DateTime(year, month, day);
    }

Я написал это для ускорения DateTime.Parse () , и он действительно работает хорошо, но все еще требует большого количества циклов.

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

Я ищу толчок в правильном направлении, заранее спасибо.

ИЗМЕНИТЬ : Некоторые люди предложили мне использовать сравнение строк для сравнения дат. Это сработает на этапе сортировки, но мне нужно анализировать даты для алгоритмов. Я до сих пор не знаю, как отсортировать файл размером 100 ГБ на 4 ГБ свободной оперативной памяти, не делая это вручную.

РЕДАКТИРОВАТЬ 2 : Что ж, благодаря нескольким предложениям, которые я использую сортировку окон , я обнаружил что есть аналогичный инструмент для Linux . В основном вы вызываете сортировку, и она все исправляет. Пока мы говорим, он делает что-то , и я надеюсь, что это скоро закончится. Используемая мной команда

sort -k 2b 2008.log > 2008.sorted.log

-k указывает, что я хочу выполнить сортировку по второй строке, которая представляет собой строку даты и времени в обычном формате ГГГГ-ММ-ДД чч: мм: ss.msek ] формат. Я должен признать, что на man-страницах отсутствуют объяснения всех опций, но я нашел много примеров, запустив info coreutils 'sort invocation' .

Я сообщу с результатами и временем. Эта часть журнала составляет около 27 ГБ. Я думаю о сортировке 2009 и 2010 отдельно, а затем объединении результатов в один файл с опцией sort -m.

Edit 3 Что ж, проверка iotop предполагает, что он читается небольшими порциями. файла данных, а затем яростно что-то предпринимает для их обработки. Этот процесс кажется довольно медленным. = (

sort не использует память, а только одно ядро. Когда он читает данные с диска, он ничего не обрабатывает. Я что-то делаю не так?

Редактировать 4 Три часов, и он по-прежнему делает то же самое. Теперь я m на том этапе, когда я хочу попробовать поиграть с параметрами функции, но я потратил три часа ... Я прервусь примерно через 4 часа и попытаюсь поставить его для ночных вычислений с более умными параметрами памяти и пространства ...

Править 5 Перед тем, как пойти домой, я перезапустил процесс с помощью следующей команды:

sort -k 2b --buffer-size=60% -T ~/temp/ -T "/media/My Passport" 2010.log -o 2010.sorted.log

Он вернул это сегодня утром:

sort: write failed: /media/My Passport/sortQAUKdT: File too large

Wraawr! Я думал, что просто добавлю как как можно больше жестких дисков, чтобы ускорить этот процесс. Судя по всему, добавить USB-накопитель было худшей идеей. На данный момент я даже не могу сказать, идет ли речь о FAT / NTFS или о чем-то подобном, потому что fdisk сообщает мне, что USB-накопитель - «неправильное устройство» ... без шуток. Я попробую еще раз попробовать позже, а пока давайте поместим этот проект в кучу, возможно, провалившуюся.

Последнее уведомление но я потратил три часа ... Я прервусь примерно через 4 часа и попробую поставить его для ночных вычислений с более умной памятью и параметрами пространства ...

Править 5 Перед тем, как я пошел домой, Я перезапустил процесс с помощью следующей команды:

sort -k 2b --buffer-size=60% -T ~/temp/ -T "/media/My Passport" 2010.log -o 2010.sorted.log

Он вернул это сегодня утром:

sort: write failed: /media/My Passport/sortQAUKdT: File too large

Wraawr! Я думал, что просто добавлю как можно больше жестких дисков, чтобы ускорить этот процесс. Судя по всему, добавить USB-накопитель было худшей идеей. На данный момент я даже не могу сказать, идет ли речь о FAT / NTFS или о чем-то подобном, потому что fdisk сообщает мне, что USB-накопитель - «неправильное устройство» ... без шуток. Я попробую еще раз попробовать позже, а пока давайте поместим этот проект в кучу, возможно, провалившуюся.

Последнее уведомление но я потратил три часа ... Я прервусь примерно через 4 часа и попробую поставить его для ночных вычислений с более умной памятью и параметрами пространства ...

Править 5 Перед тем, как я пошел домой, Я перезапустил процесс с помощью следующей команды:

sort -k 2b --buffer-size=60% -T ~/temp/ -T "/media/My Passport" 2010.log -o 2010.sorted.log

Он вернул это сегодня утром:

sort: write failed: /media/My Passport/sortQAUKdT: File too large

Wraawr! Я думал, что просто добавлю как можно больше жестких дисков, чтобы ускорить этот процесс. Судя по всему, добавить USB-накопитель было худшей идеей. На данный момент я даже не могу сказать, идет ли речь о FAT / NTFS или о чем-то подобном, потому что fdisk сообщает мне, что USB-накопитель - «неправильное устройство» ... без шуток. Я попробую еще раз попробовать позже, а пока давайте поместим этот проект в кучу, возможно, провалившуюся.

Последнее уведомление и попробуйте использовать его для ночных вычислений с более умными параметрами памяти и пространства ...

Править 5 Перед тем, как я пошел домой, я перезапустил процесс с помощью следующей команды:

sort -k 2b --buffer-size=60% -T ~/temp/ -T "/media/My Passport" 2010.log -o 2010.sorted.log

Сегодня утром он вернул это:

sort: write failed: /media/My Passport/sortQAUKdT: File too large

Wraawr! Я подумал, что просто добавлю как можно больше жестких дисков, чтобы ускорить этот процесс. Судя по всему, добавить USB-накопитель было худшей идеей. На данный момент я даже не могу сказать, идет ли речь о FAT / NTFS или о чем-то подобном, потому что fdisk сообщает мне, что USB-накопитель - «неправильное устройство» ... без шуток. Я попробую еще раз попробовать позже, а пока давайте поместим этот проект в кучу, возможно, провалившуюся.

Последнее уведомление и попробуйте использовать его для ночных вычислений с более умными параметрами памяти и пространства ...

Править 5 Перед тем, как я пошел домой, я перезапустил процесс с помощью следующей команды:

sort -k 2b --buffer-size=60% -T ~/temp/ -T "/media/My Passport" 2010.log -o 2010.sorted.log

Сегодня утром он вернул это:

sort: write failed: /media/My Passport/sortQAUKdT: File too large

Wraawr! Я подумал, что просто добавлю как можно больше жестких дисков, чтобы ускорить этот процесс. Судя по всему, добавить USB-накопитель было худшей идеей. На данный момент я даже не могу сказать, идет ли речь о FAT / NTFS или о чем-то подобном, потому что fdisk сообщает мне, что USB-накопитель - «неправильное устройство» ... без шуток. Я попробую еще раз попробовать позже, а пока давайте поместим этот проект в кучу, возможно, провалившуюся.

Последнее уведомление сегодня утром:

sort: write failed: /media/My Passport/sortQAUKdT: File too large

Wraawr! Я подумал, что просто добавлю как можно больше жестких дисков, чтобы ускорить этот процесс. Судя по всему, добавить USB-накопитель было худшей идеей. На данный момент я даже не могу сказать, идет ли речь о FAT / NTFS или о чем-то подобном, потому что fdisk сообщает мне, что USB-накопитель - «неправильное устройство» ... без шуток. Я попробую еще раз попробовать позже, а пока давайте поместим этот проект в кучу, возможно, провалившуюся.

Последнее уведомление сегодня утром:

sort: write failed: /media/My Passport/sortQAUKdT: File too large

Wraawr! Я подумал, что просто добавлю как можно больше жестких дисков, чтобы ускорить этот процесс. Судя по всему, добавить USB-накопитель было худшей идеей. На данный момент я даже не могу сказать, идет ли речь о FAT / NTFS или о чем-то подобном, потому что fdisk сообщает мне, что USB-накопитель - «неправильное устройство» ... без шуток. Я попробую еще раз попробовать позже, а пока давайте поместим этот проект в кучу, возможно, провалившуюся.

Последнее уведомление На этот раз он работал с той же командой, что и выше, но без проблемного внешнего жесткого диска. Спасибо всем за вашу помощь!

Бенчмаркинг

Используя 2 жестких диска уровня рабочей станции (скорость чтения / записи IO не менее 70 МБ / с) на одном контроллере SATA, мне потребовалось 162 минуты, чтобы отсортировать файл журнала размером 30 ГБ. Сегодня вечером мне нужно будет отсортировать еще один файл размером 52 ГБ, я опубликую его.

33
задан Gleno 28 September 2010 в 22:49
поделиться