sonicsonic1
1.02.2014 - 19:54
Доброе время суток.
Имеем большой файл(4ГБ и более). Файл со строками может быть ОЧЕНЬ большого размера (в т.ч. 2-3-4+ Гб), т.е. он ТОЧНО не поместится в оперативную память. Важно: мы не знаем заранее, сколько памяти будет доступно PHP на машине, на которой будет выполняться наш скрипт. Результатом работы должен быть файл, содержащий строки исходного файла, отсортированные по алфавиту.
Подскажите в каком направлении двигаться и как вообще решаются такие задачи? Как я понял из условия,надо основной файл резать на под файлы и обрабатывать .т к мы ограничены операт. паматью. Сортировать их и потом уже как -то собирать обратно ??
vagrand
1.02.2014 - 23:22
sonicsonic1
Цитата |
содержащий строки исходного файла, отсортированные по алфавит |
А как строки сортируются по алфавиту? По первой букве в строке?
_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
sonicsonic1
2.02.2014 - 02:00
строки сортироваться должны по алфавиту. строки содержат только буквы англ алфавита
sergeiss
2.02.2014 - 12:45
sonicsonic1, тебе уже ответили:
Цитата (Valick @ 1.02.2014 - 20:03) |
применяются базы данных |
А именно, грузишь данные в БД, делаешь выборку с сортировкой, записываешь опять в файл. Эта система будет работать с любым объемом файла и с любой оперативкой..
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Invis1ble
2.02.2014 - 12:51
а я б сказал, что делать такого размера текстовые файлы как минимум недальновидно
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
sergeiss
2.02.2014 - 13:24
Цитата (Invis1ble @ 2.02.2014 - 12:51) |
а я б сказал, что делать такого размера текстовые файлы как минимум недальновидно |
Это могут быть файлы, созданные какой-нибудь системой (конфигурация, статистика,....), а не самим программистом, который их обрабатывает. Так что умение работать с такими объемами инфы очень даже полезно.
Меня другое удивляет: человек учится на программиста, ему должны же были объяснить там, где он учится, как с этим работать, самые общие принципы?
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
sonicsonic1
2.02.2014 - 13:30
Ребята, конечно недальновидно)) Но задание дали такое + использовать БД нельзя. Только работа с файлом. Больше никаких версий решения ?
sonicsonic1, ну если хочется извращений, то:
берем первую букву алфавита
выбираем все строки читая файл построчно в отдельный файл 1
и так далее по алфавиту 2 3 4 ...
потом если надо еще сортировать
берем файл 1
и делаем выборку по второму символу, точно так же разбивая на файлы 1.1 1.2 1.3 и тд
и в зависимости от глубины сортировки вот так и мазохируем 1.1.1 - 1.1.1.1 - 1.1.1.1.1
_____________
Стимулятор ~yoomoney - 41001303250491
sonicsonic1
2.02.2014 - 14:08
ну 1 этап вроде ок. это получится это 26 больших+ 26 маленьких = 52 файла.
я не совсем понимаю зачем еще разбивать на подфайлы если можно сразу эти файлы сортировать каждый и будет же все правильно по итогу,не?
sonicsonic1, ну раз нам неизвестно значение памяти для РНР, то я вам показал как это сделать с минимальным потреблением памяти, а там как хотите, если условие теста вам позволяет, то "баба с возу кобыле легше"
__
1 этап это 1 большой и 26 маленьких из него
_____________
Стимулятор ~yoomoney - 41001303250491
Если памяти совсем мало, то можно пойти дальше, после того как насоздавали файлов в которых первые буквы начинаются на a, b и т.д. создаём файлы aa, ab и т.д., а старые a, b удаляем. В конце концов получатся файлы с отсортированными данными, которые потом просто склеиваем в один большой файл.
_____________
Gear FrameworkGear Framework на Github