Занялся написанием одного проекта и заинтересовался нагрузкой. Объясню на примере блогов. Предположим у нас есть запись в блоге , инфа о авторе , комментарии. Для вывода из бд нужно 3 запроса. Предположим напишу код благодаря которому эти 3 запроса заменятся на простой include пхп файлов в которых будет данная инфа. И дальше предположим что 200 человек практически одновременно зайдут на данную страницу создав такую приличную нагрузку. Где нагрузка будет меньше и насколько ? +Если заменить 1 запрос комментов например на 50 инклудов... Есть затея чтобы при создании записи она не вносилась в бд , а создавалась в виде пхп файла. И так же интересно какова нагрузка если юзеры будут так же массово создавать такие записи - в сравнении создания пхп и заноса в бд. Отсюда вытекает вопрос безопасности: достаточно ли например в index.php обозначить Код (Text): define ( 'PHPINCLUDE', true ); И в файле который инклудится написать Код (Text): if( !defined( 'PHPINCLUDE' ) ) die( "Error!" ); Для того чтобы не было никаких шансов просмотреть пхп файл в котором хранится инфа. Спасибо. Чем больше инфы тем лучше. Давненько видел такую реализацию в каком-то скрипте онлайн игры с выводом лога боя. Стало интересно насколько это экономит.
siiXth а самому померять слабо? Делаешь 10000 записей в бд и столько же фалов, запускаешь ab там и там и смотришь!
Замер вывода 10к записей с коментами уже проверялся теперь радо проверить 10к инклудов Хотя для чистоты эксперемента непомешало бы и то и другое использовать что бы сравнивать все в одних еденицах... И Вообще SQL быстрее имхо там 1 запросом выбираем сразу все коменты по соответствующему блогу и выводим а тут что предлогают 10к пхп файлов для инклуда? пусть будет один файл на пхп с информацией о коментах но новость то или запись в блоге не одна... да и вносить записи в файл сложнее надо соблюдать структуру документа что б нидаисвятойблокнот тебе ошибится хотя бы в 1 строчку все полетит в тар тарары..
Ну тогда комменты в 1 пхп. Неважно. И я не спрашивал про реализацию И так в итоге по нагрузке больше ничего ? Дело даже не в комментах , просто что лучше 200 запросов за пару сек или 200 инклудов...
200 запросов... меня смущает нисколько инклуды сколько то что юзверю может захотется написать ОООООООчень большой коментарий...а так как это сравнимо с гостевой книгой и скажем в файле необязательно это будет php выделена одна строчка а в блокноте в нее умещается около 700 символов а потом идет поле для даты. и смотрим что получится если я напишу комент длиной в 705 символов к примеру где поседние слова это "Ибо я так думаю" и вместо даты у нас будет: ибо я так оставлено: думаю числа потом вопрос безопасности вставю я в такой комент скрипт и постираю весь твой сайт при первом же просмотре... конешно от всего этого можно зачиттится но неужели SQL и его mysql_escape_string вместе с полем для text в несколько миллионов символов не лучше? если же после всего этого я тебя не переубедил то добро пожаловать в топик http://www.php.ru/forum/viewtopic.php?t=19244 поизвращайся над своими сценариями проведи тест и ждем твоего отчета...
тоесть мне нужно проверить вместимость ? Много-много текста ? оу , вы слашали про проверку текста ? гляну , спс
В общем Код (Text): fwrite($fp,$text); Без проблем записывает 3000 символов в пхп Сейчас буду пробывать скорость.
siiXth include нужен для одних вещей SQL нужен для других. Если ты не хочешь оставлять прямые реляционные ссылки на комменты и т.п. то можешь сохранять в файлы. Но вот при 10000 файлов, сколько будет искаться нужный в файловой системе это вопрос, и на сколько это будет отличаться в поиске внутри БД это тоже вопрос. Не известно что у тебя еще там будет. Поэтому смотри мой верхний пост.
Выйгрышь от хранения данных в файлах может быть, если у тебя выделеный сервер, на нем установлена серверная ОС, а самих данных в файлах - несколько мегабайт, и сервер ничем больше не занят. Тогда иногда все нужные файлы будут оказываться в кеше жесткого диска
Поэксперементировал я немного...с бд немного бока , забил вообщем Не многого я добился 0.25000300 1268564045 - Инклуд 10000 файлов с 3000 символами в каждом и с последующим выводом 0.57813100 1268564117 - создание тех самых файлов Остались данные по бд
как бы php файлы сами по себе закрыты от просмотра через прямой вызов define поможет. Если такая параноя, то закройте каталог с нужными правилами апачевским deny from all
незнаю , всё только в планах. первая мысль - создавать папочки по дате , в них файлы за день ,инфа о директории в главном файле в который инклудит ... есть лучше идеи ?
ты на всех этих сравнениях дат создания, существования / отсутствия файлов в каталогах потеряешь достаточно пного, если большое количество файлов подключать собираешься. идеи есть всегда, я сейчас просто глумлюсь, не обращай внимания
от куда такие страшно большие цифры ?? что за функцию для замера тыиспользовал? microtime??? и походу неформатированная.. могу сазать что данные неточны разбей функцию взрывчаткой по пробеллу и поменяй местами убрав спереди 0 =) и в конце теже функции после чего первое отниматеся от второго и получается время за которое был выполнен инклуд или запись php скриптов...
Щас главное не сортировка а сам факт того что SQL производительнее чем отдельный php скрипт с готовым решением проблеммы.
фак , я ещё не всё знаю загуглил "php скорость выполнения скрипта" и получил microtime так что делать ? я не понял
Приведу готовый код... Взят из книги PHP 5 (Кузнецов, Симдянов, Голышев) страница 405 так и называется время генерации страницы. Они ж не знали что мы тут ими будем не генерацию тестить а соревнования проводить... ели бы знали то назвали бы "какая функция быстрее работает", но сути дела не меняет. Функция microtime() возвращает фремя в микросекндак и секундах прошедшее с 1 января 1970 года день рождения у него тогда был =) и мы получаем некую строчку типа "0.48023600 1076713360" ну и ее мы развернем а потом отнимем от почти такой же цифры. PHP: <? //помещаем время старта в переменную $begin_time $part_time=explode(' ',microtime()); $begin_time=$part_time[1].substr($part_time[0],1); //тут выполняем тестируемый скрипт... пустые строки на скорость не влияют поэтому можно отступать сколько угодно //строк что б поднять читабельность $part_time=explode(' ',microtime()); $end_time=$part_time[1].substr($part_time[0],1); //выводим результат echo $end_time - $begin_time; //4.98896002769 к примеру... ничего больше =)) ?> ЗЫ я не слушаю интернет я его читаю =)