Вход на сайт
Mysql +PHP пару вопросов...
196 просмотров
Перейти к просмотру всей ветки
в ответ Alexden 04.04.06 14:14, Последний раз изменено 04.04.06 15:36 (voxel3d)
Читать треды лень, напишу, что я использую в этом случае.
Делаю таблицу сущностей безо всяких ссылок, делаю таблицу связей, содержащую ID (сущности), ParentID и количество детей первого уровня. Для построения дерева (или части дерева, где корневым элементом будет сущность с заданным ID) читаю в память таблицу сущностей, читаю в память таблицу связей, в общем, строю два списка. Даже если таблицы огромные, за счёт того, что нет никаких джойнов всё быстро в память засасывается. Далее, допустим, в тривью отображаю всё, загоняю корневым узлом элемент из списка с заданным ID, далее находжу в таблице связей соответствующую запись. Далее в цикле (у нас есть количество детей) к узлу аналогично прицепляю дететей.
С бинарным поиском прикрученным к спискам всё очень быстро происходит без лишных поисков. Можно ещё более оптимизировать и остановиться на чтении непосредственных дететeй, и только когда пользователей откроет узел, для его детей дочитывать необходимую информацию. Для сбора статистики ветка, ессно, должна быть полностью построена.
Делаю таблицу сущностей безо всяких ссылок, делаю таблицу связей, содержащую ID (сущности), ParentID и количество детей первого уровня. Для построения дерева (или части дерева, где корневым элементом будет сущность с заданным ID) читаю в память таблицу сущностей, читаю в память таблицу связей, в общем, строю два списка. Даже если таблицы огромные, за счёт того, что нет никаких джойнов всё быстро в память засасывается. Далее, допустим, в тривью отображаю всё, загоняю корневым узлом элемент из списка с заданным ID, далее находжу в таблице связей соответствующую запись. Далее в цикле (у нас есть количество детей) к узлу аналогично прицепляю дететей.
С бинарным поиском прикрученным к спискам всё очень быстро происходит без лишных поисков. Можно ещё более оптимизировать и остановиться на чтении непосредственных дететeй, и только когда пользователей откроет узел, для его детей дочитывать необходимую информацию. Для сбора статистики ветка, ессно, должна быть полностью построена.
Dropbox - средство синхронизации и бэкапа файлов.