dimagradov
Новичок
Алгоритм работы с большим файлом базы данных
Здравствуйте.
Есть сервер Centos 4 на нем PHP 4.3.9
Помогите усовершенствовать скрипт, который работает с большим файлом.
Есть очень большой текстовый файл, около двух гигов, в нем база данных в виде текста. Нужно как можно меньшими затратами для сервера и винта вытащить N-ю строку из этого большого файла.
1)Сначала, когда база данных не была большая, я просто загонял весь файл в массив и мог почти мгновенно выдать нужную строчку.
2)Затем, когда база данных стала разростаться просто добирался до нужно строчки через
Где $NUM и есть нужная строчка. Но это было очень неудобно, т.к. файл огромный и по времени очень долго добраться до нужной строки, а нужно за раз вытащить 200-500 строчек
3) потом я написал таблицу позиций для каждой строки и стал через fseek переходить на нужное место в файл и считывать строчку. Делает конечно быстрее, но винт насилуется очень страшно.
4) была идея сделать под каждую строку файл и в нужный момент считывать нужный по номеру файл, но тогда мне нужно будет создать миллион строк, а это опять же насилование компа
Посоветуйте, как можно оптимизировать алгоритм считывания нужной строки? Возможно как-то оптимизировать файл?
Спасибо заранее за ответ
Здравствуйте.
Есть сервер Centos 4 на нем PHP 4.3.9
Помогите усовершенствовать скрипт, который работает с большим файлом.
Есть очень большой текстовый файл, около двух гигов, в нем база данных в виде текста. Нужно как можно меньшими затратами для сервера и винта вытащить N-ю строку из этого большого файла.
1)Сначала, когда база данных не была большая, я просто загонял весь файл в массив и мог почти мгновенно выдать нужную строчку.
2)Затем, когда база данных стала разростаться просто добирался до нужно строчки через
PHP:
$fp=fopen('file.txt','r');
for($i=1;$i<=$NUM;$i++) $str=fgets($fp);
3) потом я написал таблицу позиций для каждой строки и стал через fseek переходить на нужное место в файл и считывать строчку. Делает конечно быстрее, но винт насилуется очень страшно.
4) была идея сделать под каждую строку файл и в нужный момент считывать нужный по номеру файл, но тогда мне нужно будет создать миллион строк, а это опять же насилование компа
Посоветуйте, как можно оптимизировать алгоритм считывания нужной строки? Возможно как-то оптимизировать файл?
Спасибо заранее за ответ
))