PHP-скрипты в БД и в файлах. Особенности

doran7

Новичок
Понятно. Я не утверждаю, что это эталонное решение, его статья - это просто информация, один из подходов. Насчет конкретной вещи - вместо eval переместить код скрипта из БД в файл а потом этот файл проинклюдить - Gonzalo Ayuso не единственный, кто такой вариант предлагает. Я видел сообщения других PHP-программистов с таким предложением. Опять же, не могу судить о правильности или оптимальности такого варианта, мой уровень знаний PHP слишком мал для этого.
 

doran7

Новичок
Больная фантазия что - вместо eval переместить код скрипта из БД в файл а потом этот файл проинклюдить? Или сама статья (я в нее подробно и не вникал)?

В плане замены eval - про stream wrapper несколько сообщений видел, вроде более интересная мысль. Но готовых решений не видел, а самому в этом подробно разбираться пока просто времени нет, ибо это для меня сейчас совсем не ключевая задача.
 

Вурдалак

Продвинутый новичок
Нет никакого смысла помещать код файла во временный файл в рамках конкретного выполнения, потому что это только добавит мусора в кешер байт-кода. Смысл не в том, чтобы избавиться от ключевого слова «eval», а в том, чтобы этот код мог быть хотя бы закеширован. Сам автор статьи решительно не понимает какую цель он преследовал. В общем, attention whore.
 

С.

Продвинутый новичок
doran7, тебе правильно указали, что единстевенное допустимое оправдание хренения кода в базе -- это возможные трудности при создании файлов на хостинге. Теперь ты притащил вариант с созданием временных файлов. Значит трудности с хостингом в этом не будет. Тогда зачем вообще заморочиваться с кодом в базе? Дергать базу, создавать и удалять файлы, если можно один раз их содать и оставить там для следуюшиух вызовов.
 

Redjik

Джедай-мастер
doran7, тебе правильно указали, что единстевенное допустимое оправдание хренения кода в базе -- это возможные трудности при создании файлов на хостинге. Теперь ты притащил вариант с созданием временных файлов. Значит трудности с хостингом в этом не будет. Тогда зачем вообще заморочиваться с кодом в базе? Дергать базу, создавать и удалять файлы, если можно один раз их содать и оставить там для следуюшиух вызовов.
я тебе расскажу зачем, но это опасно для психики =)))
это нужно для того, чтобы писать php скрипты в админке Modx, там даже для tinymce ставят плагины,чтобы подсветка кода была... некоторые люди принципиально весь сайт собирают в админке, без использования редакторов
год назад, люди находящиеся в сообществе modx в топе не пользовались IDE... сейчас начинают по-тихоньку
 

С.

Продвинутый новичок
Из написания скриптов в админке, совсем не следует хранение оных в базе.
 

doran7

Новичок
doran7, тебе правильно указали, что единстевенное допустимое оправдание хренения кода в базе -- это возможные трудности при создании файлов на хостинге.
Для своей простецкой CMS я пока решил хранить скрипты в файлах.

Что касается MODX - то эта CMS посложнее будет, и причина, по которой разработчики решили хранить скрипты в БД не так проста, возможно. Это обсуждалось в сообществе MODX, но никто так толком и не доказал, что для MODX хранение скриптов в БД - это ошибочное решение. Одна из тем в которой это обсуждалось:
Почему шаблоны и снипеты хранятся в БД?

Интересно такое рассуждение:
Вообще в MODx имеется тесная связь различных элементов, и при многих действиях требуется найти различные элементы, удовлетворяющие определенным условиям, например, параметры, включенные в шаблон, назначенный текущему документу. Базы данных как раз и созданы для облегчения такого отбора. Кроме того, у файла намного меньше дополнительных параметров, чем у записи в таблице, так что одним файлом вряд ли можно обойтись.
При этом, например, CSS или JavaScript не влияет на общее взаимодействие элементов, так что данные элементы в базе не хранятся.
То есть в работающем сайте хранение в базе оправдано, а если кому-то хочется при разработке хранить какие-то данные в файлах – это легко можно сделать.
Скрипты которые хранятся в БД в MODX Evo: шаблоны, чанки (мелькие шаблоны, сегменты html), сниппеты, плагины, модули. Между всеми этими компонентами в системе MODX Evo существует тесная взаимосвязь. Возможно (это только мое предположение) через БД эта взаимосвязь идет в чем-то быстрее и оптимальнее. Могу ошибаться - я не разработчик MODX, но и признать разработчиков MODX Evo просто безграмотными я не могу.

Лично мне не нравится хранение компонентов (скриптов) CMS в БД. По любому скрипты пишу и отлаживаю в файлах. Но после этого отлаженные скрипты возвращаю в БД для MODX. Просто потому что боюсь нарушить какую-то структуру, мне неизвестную, которая задумана разработчиками. Возможно - напрасно.

Есть кстати сайты на MODX Evo, которые имея шаблоны и PHP-компоненты (скрипты) в БД выдерживают совершено невероятную для CMS нагрузку:
Сайт на MODX Evo более 1 млн посещений в день, до 20 тыс онлайн
 

Redjik

Джедай-мастер
Боже мой, я уже говорил - эта статья НЕ О Modx, а о нагрузке, и кстати автор выбирал не оптимальные решения как с ней справляться...
Я не гуру по нагрузке, но я бы шел другим путем...
 

С.

Продвинутый новичок
Вообще в MODx имеется тесная связь различных элементов, и при многих действиях требуется найти различные элементы, удовлетворяющие определенным условиям, например, параметры, включенные в шаблон, назначенный текущему документу. Базы данных как раз и созданы для облегчения такого отбора. Кроме того, у файла намного меньше дополнительных параметров, чем у записи в таблице, так что одним файлом вряд ли можно обойтись.
Держать информацию об элементе в базе, а сам код -- в файле, это наверное ренегатство для. Либо только в базе, либо только в файле.
 

doran7

Новичок
Держать информацию об элементе в базе, а сам код -- в файле, это наверное ренегатство для.
Такого никто не делает на работающем сайте. Такое возникает только на этапе разработки и отладки сайта, из-за удобства редактирования скриптов в файлах (если скрипты у CMS в БД).

Скрипты в БД у MODX - это наследство Etomite CMS, которая была когда-то популярной (и живет кстати до сих пор) и от которой отпочковался MODX. Ситуация, помалу, проясняется.
 

doran7

Новичок
Некоторая англоязычная инфа по теме.

Db queries tend to be slower than file includes.
И еще
Reading from disk is probably still quicker though than querying the db.
Вопрос к корифеям - это верные утверждения?

Если так, то в пользу хранения скриптов в БД почти ничего не остается, кроме ограничений хостеров на запись информации в файлы.
 

Фанат

oncle terrible
Команда форума
мой очередь :) попробую объяснить. а то чувак по ходу не врубается совсем.
он не понимает, почему важно кэширование. а точнее, оно вообще в его системе координат отсутствует.
 

Фанат

oncle terrible
Команда форума
смотри.
пхп - интерпретируемый язык.
это значит, что каждый раз, на каждый запрос пользователя, тексты всех скриптов, участвующих в обработке запроса, нужно перебрать по одному символу, провести лексический анализ и транслировать в байт-код.
пока скрипты маленькие, 100-200 килобайт - это не принципиально.
Но когда код разрастается до нескольких мегабайт - нагрузка на интерпретатор становится уже ощутимой.
И для разрешения этой проблемы придумали кэшеры байт-кода.
которые хранят внутри себя уже готовый байт-код.
и когда программа только ещё собирается заинклюдить какой-нибудь файл, кэшер такой - опа! а у меня уже готовое есть! - и подсовывает байт код без чтения файла и парсинга.
чем значительно ускоряет процесс, сокращает нагрузку.

Поэтому так важно, чтобы код лежал в файлах, при этом не временных. потому что если нету файла, то и кэшировать нечего.
Поэтому, если разработчик не малалетний далбаоп, то он держит свой код в файлах, а не в том, что ему подсказала эротическая фантазия.

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

Но вообще, я думаю ввести запрет на вопросы оптимизаторов-теоретиков. Объяснить им всё равно ничего невозможно, а времени на них тратится вагон
 

doran7

Новичок
Фанат, благодарю за разъяснение, оно самое толковое, из всех что я видел по данному вопросу. Искал, читал разное - но такой инфы нигде не находил.

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

Но вообще, я думаю ввести запрет на вопросы оптимизаторов-теоретиков. Объяснить им всё равно ничего невозможно, а времени на них тратится вагон
Это в принципе верно, но имхо, я не последний, для кого этот вопрос в тумане... :)

Сбивает с толку хранение скриптов в БД например, у той же MODX... Причем это как пошло от Etomite к MODX Evo, так и в новую версию - в MODX Revo перешло. А MODX очень популярная и хорошая вещь, была признана лучшей CMS open sourse прошедшего года. Это и сбивает с толку, особенно таких как я, в PHP новичков.
 

Фанат

oncle terrible
Команда форума
- это независимо от того, какой юзер обратизся к сайту - знакомый или тот что впервые? Т.е. по запросу незнакомого незнакомого юзера сервер тоже берет скрипт из кэша байткода а не из файла скрипта? Это ж надо все скрипты заранее в кэше держать.
Давай ты подумаешь над этим своим вопросом, поймёшь его бессмысленность, и сам напишешь себе здесь ответ?
Это в принципе верно, но имхо, я не последний, для кого этот вопрос в тумане...
Проблема не в тумане.
проблема в отсутствии проблемы.
На данный момент у тебя никакой проблемы с производительностью нет. Есть только туманные фантазии, миллион чьих-то постов в интернете и никакого средства чтобы отличить нормальные от тупых. Для тебя все высказывания равны. или даже хуже - высказывания собрата-нуба даже ближе, поскольку он думает так же как и ты, впечатлён ничего не значащими вещами как и ты, и не подозревает о существовании действительно важных вещей как и ты.
При этом в любом случае у тебя всё работа идёт на уровне слов. слов, а не дела. Хотя реальная проблема с производительностью давно бы расставила всё по своим местам.
Сбивает с толку хранение скриптов в БД например, у той же MODX...
Тебе уже объясняли не раз и не два. ИДИОТОВ в мире в принципе куда больше, чем нормальных людей. И разработчики различных цэмээс - не исключение.
 

Redjik

Джедай-мастер
doran7
Фаната тоже забанили бы на форумах модекса кстати... =)))

doran7
modx evo был признан самым многообещающим продуктом 4 !!!! года назад... больше ни одной награды - они говнари =) которые неплохо себя продают... точка.
 

doran7

Новичок
Да я потому и здесь что авторитетам от PHP верю больше, чем авторитетам от разных CMS. Благодарю за ценные разъяснения. Идиотов от нормальных людей отличить совсем не просто, особенно когда идиоты кое-где в большом авторитете... Не я же присваивал этой цэмээс звание лучшей цэмээс года.
 

doran7

Новичок
doran7
Фаната тоже забанили бы на форумах модекса кстати... =)))
Это как выпить дать... :) Причем в международном сообществе... Там политика все определяет, а не техника. Я пока до этого допер - сотни страниц английского текста перелопатил. Но на это времени гораздо меньше ушло, чем на изучение Друпала...:) Так что в этом случае я гораздо меньше потерял.

На форуме Клиппера, кстати, более адекватная публика, чем в англоязычном сообществе модекса.
 
Сверху