| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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, многие удаляются из-за похабностей, но ничего не тормозит! Может ты криво скрипт написал??? Кинь ка его сюда, может там страшные циклы??? |
| Автор: 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 байт |
| Автор: RaZoR 23.6.2004, 15:50 |
| все, потестил я скрипт на больших файлах.. результат меня устраивает.. удивительно то, что скрипт работает практически одно и то же время с 10 записьями и с 10000 записями.. ~0,2 секунды.. вполне нормальный результат я считаю |
| Автор: IZ@TOP 23.6.2004, 16:15 |
| RaZoR О чем я и говорил |
| Автор: Chuck 23.6.2004, 17:20 | ||
Поддержим отечественных производителей |