Строил ли кто нибудь динамическое дерево на РНР? Информация вытаскиваеца из mysql, там структура одной из таблиц по типу id, id_parent, levle, name ... то есть объектная база. Есть задача: построить дерево с неограниченной вложенностью. но есть одно НО. Когда очень много записей (около 100 тысяч), построение дерева затягивается на неопределенный срок. В рнр.ини таймаут можно ставить сколь угодно долгим, все равно процесс идет очень долго. Так вот, хотелось бы ветки дерева подгружать каким то способом, слабо пока представляю каким. Но таким, чтобы при нажатии допустим на "плюсик" загружалась какая то одна ветка. Т.е. первично необходимо построить только самые верхние ветки. А затем уже, подгружать каким то образом, при нажатии, другие ветки. Может быть стояла перед кем то подобная задача?
Строил ли кто нибудь динамическое дерево на РНР? Информация вытаскиваеца из mysql, там структура одной из таблиц по типу id, id_parent, levle, name ... то есть объектная база. Есть задача: построить дерево с неограниченной вложенностью. но есть одно НО. Когда очень много записей (около 100 тысяч), построение дерева затягивается на неопределенный срок. В рнр.ини таймаут можно ставить сколь угодно долгим, все равно процесс идет очень долго. Так вот, хотелось бы ветки дерева подгружать каким то способом, слабо пока представляю каким. Но таким, чтобы при нажатии допустим на "плюсик" загружалась какая то одна ветка. Т.е. первично необходимо построить только самые верхние ветки. А затем уже, подгружать каким то образом, при нажатии, другие ветки. Может быть стояла перед кем то подобная задача?
Че-то я вопрос не очень понял, но отвечу.
Я использую деревья только для построения виртуальной структуры в CMS. На выводе напоминает обычную файловую структуру. Но потребность в сотни тысяч узлов дерева как-то пока не встречал. Если у тебя какие-то проблемы с производительностью, то возможно недостаточно оптимизирована логинка, слишком много данных, слишком много запросов и т.д. Надо копать в этом направлении. Также следует обратить внимание, что MySQL мало подходит для огромного количества данных, тут лучше посмотреть в сторону Oracle. Тоже относится и к железу, ОС. Серверное железо, FreeBSD/Linux.
Вообще, деревья -- это структура, она должна быть отдельно от информации. Т.е. нельзя в одной таблице MySQL хранить и описание структуры дерева и информацию для каждого узла дерева.
Предпочитаю делать простую реализацию дерева: id->parent_id. Если надо, чтобы ветви дерева сохраняли порядок, то стоит обратить внимание на dbtree (класс PHP), он используется как раз для этого. Использование параметра level в структуре дерева облегчает построение слоев ветвей, но и добавляет некоторой лишней информации, усложняя динамичность дерева.
Че-то я вопрос не очень понял, но отвечу.
Я использую деревья только для построения виртуальной структуры в CMS. На выводе напоминает обычную файловую структуру. Но потребность в сотни тысяч узлов дерева как-то пока не встречал. Если у тебя какие-то проблемы с производительностью, то возможно недостаточно оптимизирована логинка, слишком много данных, слишком много запросов и т.д. Надо копать в этом направлении. Также следует обратить внимание, что MySQL мало подходит для огромного количества данных, тут лучше посмотреть в сторону Oracle. Тоже относится и к железу, ОС. Серверное железо, FreeBSD/Linux.
Вообще, деревья -- это структура, она должна быть отдельно от информации. Т.е. нельзя в одной таблице MySQL хранить и описание структуры дерева и информацию для каждого узла дерева.
Предпочитаю делать простую реализацию дерева: id->parent_id. Если надо, чтобы ветви дерева сохраняли порядок, то стоит обратить внимание на dbtree (класс PHP), он используется как раз для этого. Использование параметра level в структуре дерева облегчает построение слоев ветвей, но и добавляет некоторой лишней информации, усложняя динамичность дерева.
Поставлен в жесткие рамки, т.е. обговаривалось уже тыщу раз почему не оракл, поэтому только мускул. Сотни тысяч узлов там нет, есть сотня тысяч записей, а узлов от силы 20-30. Тоже склонен считать что тормозит именно из-за большого количества запросов из-за гадкой рекурсии. Читал где то что можно сделать выборку одним запросом и затем уже в массиве разгребать это все. Но пока с реализацией че то туговато.
Поставлен в жесткие рамки, т.е. обговаривалось уже тыщу раз почему не оракл, поэтому только мускул. Сотни тысяч узлов там нет, есть сотня тысяч записей, а узлов от силы 20-30. Тоже склонен считать что тормозит именно из-за большого количества запросов из-за гадкой рекурсии. Читал где то что можно сделать выборку одним запросом и затем уже в массиве разгребать это все. Но пока с реализацией че то туговато.
Ну есть дерево, есть тысячи документов, связанных с узлами этого дерева. Дальше что надо делать с деревом? Ты хочешь его вывести и построить, либо вывести документы из системы, согласно их структуре? Поставь задачу в общем.
Строил ли кто нибудь динамическое дерево на РНР? Информация вытаскиваеца из mysql, там структура одной из таблиц по типу id, id_parent, levle, name ... то есть объектная база. Есть задача: построить дерево с неограниченной вложенностью. но есть одно НО. Когда очень много записей (около 100 тысяч), построение дерева затягивается на неопределенный срок.
Вообще, не дело это, выбирать из базы и хранить в памяти количество записей, более чем на порядок превосходящее количество строк для отображения на странице.
Тебе нужно отобразить все 100 тысяч записей на одной странице? Тогда будет строить долго, никуда не денешься. Если в разы меньше - то думай, как оптимизировать запросы и структуры в памяти.
Вообще, не дело это, выбирать из базы и хранить в памяти количество записей, более чем на порядок превосходящее количество строк для отображения на странице.
Тебе нужно отобразить все 100 тысяч записей на одной странице? Тогда будет строить долго, никуда не денешься. Если в разы меньше - то думай, как оптимизировать запросы и структуры в памяти.
В том то и дело, если строить все дерево, то строится оно очень долго, что в принципе неприемлемо, поэтому желательно выводить верхние ветки, а затем вглубь только по запросу (при нажатии на "плюсик" допустим).
Ну есть дерево, есть тысячи документов, связанных с узлами этого дерева. Дальше что надо делать с деревом? Ты хочешь его вывести и построить, либо вывести документы из системы, согласно их структуре? Поставь задачу в общем.
Надо вывести и построить дерево
В том то и дело, если строить все дерево, то строится оно очень долго, что в принципе неприемлемо, поэтому желательно выводить верхние ветки, а затем вглубь только по запросу (при нажатии на "плюсик" допустим).
Почитай пару-тройку месяцев книжки по "чистому" программированию, не по PHP
юзай "LIMIT начало,сколько"
например SELECT * FROM users LIMIT 100,10
выведет записи с 100-й по 110-ю