Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > чтение из большого txt файла


Автор: RaZoR 22.6.2004, 19:51
у меня есть скрипт гостевой книги(http://filmoscope.h12.ru/guest/), так вот если там много записей, то скрипт выполнятеся долго.. сейчас у меня 13 записей в гуесте и время генерации скрипта ~0,2 сек.. а если их будет штук 100?? у меня возникла идея.. посты выводятся постранично(10 штук на страницу) и можно ли как-нибудь сделать считывание не всего файла(вместо file() что-либо другое), а только нужные 10 строк? к примеру если записей 25, то когда первая страница, то последние 10 строк, если 2 страница, то с 5 по 15, а если 3-я, то первые 5 строк.. это реально? или так еще дольше? или еще какие варианты есть?

Автор: Secandr 22.6.2004, 19:58
Есть три варианта:
1. использовать mysql
2. использовать fopen, а новые сообщения писать в начало файла.
3. разбивать данные на файлы по 20 записей.

Автор: RaZoR 22.6.2004, 20:28
1. пока отпадает, т.к. не знаю как с ней работать..
2. да, для всех страниц это будет быстрее, но для последней страницы будет тоже самое, хотя это мысль...
3. я думаю это выход, но неудобно.. если нужно к примеру удалить какой-нить пост из середины? тогда все менять..

Автор: Ignat 22.6.2004, 20:40
За то время, пока будешь мучать файловую гостевуху, можешь выучить основы mysql, поверь. Для гостевухи хватит знать четырех запросов SELECT, INSERT, UPDATE, DELETE. Хотя можно обойтись и без UPDATE. А, ну еще CREATE table.

Автор: RaZoR 22.6.2004, 20:45
возможно и так.. скоро собираюсь учить.. но в данном случае мне нужно решение именно этой проблемы.. с файлами..

Автор: Secandr 22.6.2004, 21:49
RaZoR
пиши свою СУБД.

Автор: Chuck 22.6.2004, 22:25
Не понимаю тебя дружище, у меня на хостинге был скрипт гостевой на файлах и ничего не тормозила, сейчас там записей 40-50, многие удаляются из-за похабностей, но ничего не тормозит!
Может ты криво скрипт написал??? Кинь ка его сюда, может там страшные циклы??? smile.gif)))

Автор: IZ@TOP 22.6.2004, 23:57
Ага, точняк... если у тебя каждео сообщение не весит кило по 100. У меня 10MByets файл читался за 1 сек и выводился (а это в среднем 10 000 записей).

Автор: Akina 23.6.2004, 09:42
ИМХО

Максимально простое рещение в рамках заявленных знаний:
1) помещение каждой записи в отдельный файл либо группы записей для одной страницы вывода в отдельный файл;
2) созздание индексного файла с именами-ссылками на файлы записей.

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

Автор: Secandr 23.6.2004, 09:49
Akina
вот я и говорю писать свою субд.
Ещё возникают проблемы с редактированием, нужно будет постояно переписывать индексный файл,....

Автор: RaZoR 23.6.2004, 11:03
да нет.. скрипт нормальный.. вначале идет считывание из файла и разделение по ячейкам, потом в шаблоне заменяется к примеру @message@ на сообщение и все.

Автор: Akina 23.6.2004, 11:08
Secandr
Цитата
возникают проблемы с редактированием, нужно будет постояно переписывать индексный файл,....

Для случая "одна запись - один файл" в случае индексного файла со строками постоянной длины - никаких проблем... выверт а-ля deleted record в DBF. fopen(..."rb") + fseek - забиваем чисельный индекс пробелами-звездами-чем хотим...

Автор: Secandr 23.6.2004, 11:11
одна запись - один файл - это чрезвычайно не эффективно. Если записи 10-15 байт, а кластеры по 1кб , то информация будет занимать 500-900% от настоящего объёма.

Автор: Akina 23.6.2004, 12:35
Конечно. Однако нежелание автора изучить мускул провоцирует на использование заведомо неоптимальных по другим параметрам решений.

И вообще - чего это мы? Жуем тут прописные истины...

Кстати, при таком способе хранения (одна запись - один файл) рационально хранить в этом файле все необходимое ХТМЛ-форматирование. А это уже не 15 байт smile.gif

Автор: RaZoR 23.6.2004, 15:50
все, потестил я скрипт на больших файлах.. результат меня устраивает.. удивительно то, что скрипт работает практически одно и то же время с 10 записьями и с 10000 записями.. ~0,2 секунды.. вполне нормальный результат я считаю

Автор: IZ@TOP 23.6.2004, 16:15
RaZoR
О чем я и говорил wink.gif

Автор: Chuck 23.6.2004, 17:20
Цитата
пиши свою СУБД.

Поддержим отечественных производителей smile.gif)))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)