За последние 24 часа нас посетили 17559 программистов и 1687 роботов. Сейчас ищут 935 программистов ...

Сортировка файла большого размера

Тема в разделе "Прочие вопросы по PHP", создана пользователем sonicsonic1, 1 фев 2014.

  1. sonicsonic1

    sonicsonic1 Новичок

    С нами с:
    15 янв 2014
    Сообщения:
    8
    Симпатии:
    0
    Доброе время суток.
    Имеем большой файл(4ГБ и более). Файл со строками может быть ОЧЕНЬ большого размера (в т.ч. 2-3-4+ Гб), т.е. он ТОЧНО не поместится в оперативную память. Важно: мы не знаем заранее, сколько памяти будет доступно PHP на машине, на которой будет выполняться наш скрипт. Результатом работы должен быть файл, содержащий строки исходного файла, отсортированные по алфавиту.

    Подскажите в каком направлении двигаться и как вообще решаются такие задачи? Как я понял из условия,надо основной файл резать на под файлы и обрабатывать .т к мы ограничены операт. памятью. Сортировать их и потом уже как -то собирать обратно ??
     
  2. Invision

    Invision Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    Обрабатывать файл через python
     
  3. Amian

    Amian Активный пользователь

    С нами с:
    15 мар 2007
    Сообщения:
    189
    Симпатии:
    0
    Записать всё что начинается на А в один файл, на Б в другой и т.д. Затем сделать внутреннюю сортировку у каждого полученного файла и склеить. Если всё равно не будет хватать памяти, то можно сделать ещё больше файлов, например, АА, АБ ... БА, ББ ...
     
  4. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    2 варианта:
    1) внешняя сортировка
    2) засунуть в БД
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Я где-то слышал, что базы данных придумали как раз вот для таких случаев. Чтобы не ворочать и парсить 4-гиговые файлы руками. Попробуйте, может понравится.
     
  6. MaXyC_Web_Studio

    MaXyC_Web_Studio Активный пользователь

    С нами с:
    31 дек 2006
    Сообщения:
    678
    Симпатии:
    3
    Адрес:
    Новоуральск
    какой тип данных в файле? если xml, то вам необходимо копать в сторону http://xmlhack.ru/texts/06/stx/stx.html
    если другой формат, то данные явно как то должны разграничиваться. в свое время, когда не знал о существовании первого варианта, я сделал свой парсер:
    1. брал текст блоками
    2. парсил конечный блок
    3. брал следующий блок текста

    Добавлено спустя 1 минуту 1 секунду:
    забыл. не нужно грузить блоки размером с доступную память. достаточно по 4-10 кб данных. по скорости даже быстрее.
     
  7. sonicsonic1

    sonicsonic1 Новичок

    С нами с:
    15 янв 2014
    Сообщения:
    8
    Симпатии:
    0
    Спасибо за Ваши ответы.
    БД использовать было нельзя,а вообще надо было сделать как предложил Amian. Жаль что не успел((