Xpoint
   [напомнить пароль]

Кеширование дерева

Метки: [без меток]
[удл]
2007-05-27 19:34:05 [обр] Сергей Морозов[досье]
В разрабатываемой мной CMS вся информация (т.е. контент сайта) хранится в дереве, которое упаковано в таблицу базы данных. Основные поля таблицы — это ID (уникальный идентификатор), PID (идентификатор родителя), Name (название элемента по-английски; из названий составляется URL), Node (тип элемента — папка или документ), Path (адрес элемента, составляется из полей Name). Есть и другие, но суть ясна.
Выборку информации из дерева осуществляет специальный класс.
Но в процессе формирования страницы приходится делать очень много запросов к БД. Мне кажется, лучше было бы как-то сохранять дерево (ну, не все, а только основные поля), возможно, в файле, чтобы быстрее было. Вот только как это лучше сделать, чтобы было оптимально?
Может вообще не нужно ничего кешировать?
спустя 5 часов [обр] Phlinten(0/14)[досье]
а что мешает, в начале работы скрипта, один раз выбирать дерево, а потом работать уже с ним?
а можно складывать в xml файлик, и уже его парсить в начале скрипта.
спустя 10 часов [обр] Привидение+(611/795)[досье]

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

Непонятно, почему нельзя выбрать те самые "основные поля" одним запросом.
Если количество папок небольшое, скажем, до 50, то имеет смысл выбирать их все одним запросом.
Или не все, а только первого-второго уровня.

спустя 1 час 50 минут [обр] Сергей Морозов[досье]
Привидение[досье] Дерево само не формируется, оно хранится в таблице. Во время генерации страницы из нее берется информация. Но условия выбора разные: по id, по pid, по path. Если сохранить всю таблицу в виде массива, то для нахождения элемента с определенным значением поля придется пробегать весь массив.
спустя 1 час 37 минут [обр] Привидение+(611/795)[досье]

Допустим, придется. И что?

Сергей Морозов[досье]
Вы не пробовали, перед тем, как написать в форум, немного подумать над своими аргументами?
Вроде бы, вопрос был о количестве запросов, а не о "пробегании всего массива".
Вроде бы, ваше собственное решение, основанное на записи в файл, тоже требует "пробегания". почему пробегать весь массив, полученный из файла - не пугает, а из базы - пугает?

И где я писал, что сохранять всю таблицу? Я писал - дерево. Только папки

спустя 1 час 49 минут [обр] Сергей Пантелеев(0/15)[досье]
Если нужно находить элемент не пробегая массив, кладите элемент в хеш. В чем проблема-то?
спустя 1 день 22 часа [обр] Sallee V(4/4)[досье]
Если имеется поле "путь", нельзя ли делать выборку одним запросом, сортируя по этому полю? Я так понимаю, многочисленные запросы получаются при выборке по PID... Кроме того, всегда можно посмотреть в сторону Вложенных множеств (nested sets)... где вся структура выбирается одним запросом в правильном порядке.
Powered by POEM™ Engine Copyright © 2002-2005