Двоичное дерево с использованием PHP + MySQL - PullRequest
7 голосов
/ 19 марта 2012

Я реализую дерево MLM для веб-сайта, используя PHP (CodeIgniter) и MySQL.Мне нужна реализация двоичного дерева в базе данных.Следующие вещи должны быть рассмотрены:

  1. Для каждого узла Минимальное количество дочерних узлов / узлов в левом поддереве и количество дочерних узлов / узлов в правом поддереве называется парой.За каждую пару один узел получает 1 балл - который должен храниться в базе данных (узлы представляют пользователей)

  2. Когда создается новый узел (где бы то ни было), возможно, что многие из узловпара увеличивается.Таким образом, всякий раз, когда узел создается, точка каждого узла должна обновляться (увеличиваться на единицу, когда это применимо)

  3. другое ограничение - каждый день любой узел не может иметь более 100 точек.

  4. Мне также нужно построить (отобразить на веб-странице) дерево.Только 4-5 уровней должны быть показаны.

  5. База данных, вероятно, будет иметь 100000 узлов

Я нашел в основном 4 модели для реализациииерархические данные в MySQL, PHP

  1. список смежностей
  2. перечисление пути
  3. вложенные множества
  4. таблица закрытия

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

Я пробовал решение для списка смежности.

node ( id, parentid, leftChildId,rightChildId,leftCount,rightCount ) 
userStat(id,sdate,pairs,mlmIncome)

каждый раз, когда вставляется один узел, я иду вверх и продолжаю увеличивать количество дочерних элементов. Если создается новая пара, то я тоже увеличиваю и увеличиваю точку. Я делаю это с помощью хранимых процедур.

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

Хотя скоростьпостроение дерева - это больше, чем вставка.И вложенный набор лучше в построении деревьев ..

Я в правильном направлении ??Пожалуйста, помогите!

Заранее спасибо!

1 Ответ

1 голос
/ 20 марта 2012

Этот блог может помочь вам с управлением данными иерархии

Возможно, наиболее знакомым для вашего вопроса является Модифицированный обход дерева предзаказа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...