Алгоритм работы с большим файлом базы данных

Статус
В этой теме нельзя размещать новые ответы.

dimagradov

Новичок
Алгоритм работы с большим файлом базы данных

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

dimagradov

Новичок
А какую бы вы базу данных посоветовали бы для конкретной задачи?
На сервере есть
mysql-4.1.22
sqlite-3.3.6
postgresql-7.4.19
 

zerkms

TDD infected
Команда форума
мне одному показалось, что человек разговаривает сам с собой? :)))
 

dimagradov

Новичок
Автор оригинала: zerkms
мне одному показалось, что человек разговаривает сам с собой? :)))
zerkms
Если для вас смешно, что я файлы использую вместо базы данных, то мне смешно, что вы используете ос gentoo, где нужно собирать каждую прогу, вместо того, чтобы использовать уже готовые ОС
Относитесь к людям попроще, если они чего-то не знают, они не виноваты в этом. Мне нужно написать как можно быстрее скрипт и заниматься совершенно другими вещами. Да и все изучить просто невозможно.
 

Alexandre

PHPПенсионер
для того чтоб использовать БД - надо еще суметь эти данные в БД запихнуть.
1) читаем литературу по БД, используем то, что установлено на сервере: mysql-4.1.22 или postgresql-7.4.19 Литературы в инете - разной навалом, но по MySQL - больше

2) пишем программу, которая перегонит данные из мега-файла в БД
- считываем файлы небольшими блоками и частями записываем в БД.

3) переделываем свою программу под работой с БД
 

nirex

Новичок
Alexandre
перегнать данные можно при помощи тестового редактора и встроенного реплейсера с регулярками :)
 

zerkms

TDD infected
Команда форума
я намекал лишь на похожие ники, а ты какой-то нервный :)
 

dimagradov

Новичок
Спасибо, ребята. с Базами данных я немного знаком, писал каталоги и простенькие проги на mysql. Но очень хотел обойтись без базы данных.
nirex Центос не дает обновлять версии прог, я бы давно php до 5-го обновил.
Alexandre спасибо, перегоню, интересно посмотрим не будет ли при этом винт насиловаться...

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

zerkms

TDD infected
Команда форума
dimagradov
не верю, что под центос нет свежих версий.
 

dimagradov

Новичок
zerkms
У Центоса политика такая версии прог не меняются, только убираются глюки, этим он и удобен. В Пятом Центосе наверняка версия выше, только я не хочу обновлять сервер, т.к. он в штатах и за это нужно доплачивать.
Вот только я задумался, а как же я буду делать dump базы, ведь у меня этих текстовых файлов на 20 гигобайт...
Может кто-нибудь подскажет как без sql обойтись?
 

dimagolov

Новичок
dimagradov, учи матчасть:
CentOS 4
[dimagolov@office ~]$ yum search mysql | grep server | grep i386
mysql-server.i386 4.1.22-2.el4 base
MySQL-server.i386 5.0.51a-0 installed
п.с. а собирать из исходников частенько и на центосе приходится...
 

dimagradov

Новичок
dimagolov
Ну это понятно, что взяв src.rpm из того же 5-го центоса собрать можно и mysql5, только если обновление вышло, опять пересобирать? это же неудобно.
tf Не долюбливаю я эту mysql, в 4-й допускал ошибки, что mysql зависала, и не заканчивалась по таймауту. Но это уже субъективизм. попробую переписать скрипт под базу, сначала на рабочей станции, тут у меня федора и 5-я mysql)
 

dimagolov

Новичок
dimagradov, кончай чушь пороть про ошибки и прочее. и скажи внятно что у тебя за система, для начала.

что выводит
PHP:
uname -a
?
 

HEm

Сетевой бобер
фуф, а я думаю, чего это димаголов такие вопросы стал задавать, а это не он ;)
 

phprus

Moderator
Команда форума
Alexandre
[на правах оффтопика]
sed - тоже текстовый редактор ;)
[/на правах оффтопика]
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху