Хранение иерархических данных в MySQL с высокой загрузкой записи - PullRequest
6 голосов
/ 08 ноября 2011

Я создаю веб-приложение, которое должно иметь высокую нагрузку записи и тысячи, даже миллионы иерархических записей, представляющих определенные / построенные пользователем деревья. Я не пытаюсь создать форум с потоками, но огромную базу данных с тысячами небольших иерархий (деревьев с 10-20 потомками) ...

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

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

Я хотел бы услышать о других людях, сталкивающихся с подобными проблемами.

Ответы [ 2 ]

5 голосов
/ 17 ноября 2011

Если вы можете установить плагины MySQL, то вам нужен OQGraph механизм хранения.

4 голосов
/ 17 ноября 2011

В чем проблема с вложенными множествами?

Пересчитывает ли значения lft / rgt, когда вы добавляете / удаляете узлы?

Вы уверены, что при небольшом тщательном планировании вы можете настроить его, так что вам придется делать только редкие пересчеты.Я на самом деле не пробовал, но однажды планировал систему (клиенту не нужна система в конце!)

Один - умножение значений, скажем, 1000, при первом их вычислении,Затем, если вы добавите узел, вы можете просто вставить числа между значениями.Только при большом количестве вставок у вас заканчиваются цифры.Пакетный процесс с низким приоритетом может пересчитать дерево для освобождения номеров для новых вставок.

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

...