2011-11-08 2 views
6

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

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

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

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

+0

Не могли бы вы немного пояснить? Вы хотите сохранить все это и запросить иерархии? Как вы будете делать свои запросы? –

ответ

5

Если вы можете установить MySQL-плагины, то вам понадобится OQGraph.

+1

+1 Однако установка плагина не открыта для всех. Вот почему я наградил bounty @barryhunter – Johan

+0

Спасибо в любом случае;) Помните, чем больше людей знают о OQGraph, тем скорее мы можем увидеть это как часть установок по умолчанию в хостинговых компаниях :) – Mchl

4

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

Рассчитывает значения lft/rgt при добавлении/удалении узлов?

Довольно уверенно с небольшим тщательным планированием, вы можете настроить его, поэтому нужно делать только редкую рекомпьютацию. Я не предпринял никаких действий, но сделал некоторое планирование для системы один раз (клиенту не нужна система в конце!)

Один, умножает значения, скажем 1000, при их первом вычислении. Затем, если вы добавите узел, вы можете просто вставить числа между значениями. Его единственный, когда есть большое количество вставок, вы начинаете заканчивать номера. Низкий приоритет пакетного процесса, может перепродать дерево, чтобы высвободить номера для свежих вставок.

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

+0

+1 У Joe Celko есть несколько отличных сообщений на этом где-то. Я считаю, что в его книге «SQL для умников Джо Селко» есть раздел. Конечно, стоит искать Google. –