2016-02-03 2 views
2

В настоящее время я пытаюсь найти лучший способ хранения дерева в базе данных (возможно, mysql, если это возможно). Эти ограничения и использование дерева:Хранить дерево в базе данных

  • Каждый узлы могут иметь 4 детей максимум, но лучше, если она является масштабируемой и до х детей
  • каждого ребенка имеют вес (если родитель имеет 3 листа, вероятность использования каждого из них может составлять 40%, 40% и 20%, например).
  • около 40K узлы будут храниться в базе данных, но это лучше, если она является масштабируемой и хорошо с 1M, например
  • Нет данных будут записаны в базу данных, только чтение
  • Цель состоит в том, чтобы иметь очень хорошая производительность чтения от корня до определенного листа, чтобы не быть в состоянии отобразить все дерево сразу

на данный момент я думал использовать модель списка смежности: https://www.simple-talk.com/content/article.aspx?article=1234 с весом, хранящимся в качестве поля.

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

+0

Насколько я знаю, базы данных SQL имеют низкую производительность со связанными или рекурсивными данными, такими как деревья. –

+0

@SergeRogatch: тогда вы использовали неправильные базы данных (или неправильные запросы). Рекурсивные запросы довольно эффективны. –

+0

Какая СУБД вы используете? –

ответ

0

Возможно, вам стоит использовать базу данных графа, такую ​​как neo4j.

0

Поскольку вы говорите о дереве, а не об общем графике - как насчет файловой системы? Вы должны быть способны получить хорошую производительность. Вы даже можете сохранить его в памяти. Он также может легко масштабироваться до 1М узлов. И вы получаете инструменты для резервного копирования, просмотра дерева и т. Д. Бесплатно.

Иногда самое простое решение является лучшим.

+0

И хранить данные для каждого узла в файле? Конечно, будет нормально открывать файл каждый раз, чтобы получить свойства? – LodoybObon

+0

Не уверен, но это, вероятно, один час работы, чтобы узнать. Проверьте [tmpfs] (http://www.cyberciti.biz/tips/what-is-devshm-and-its-practical-usage.html). Также зависит от того, какую часть структуры каталогов вы можете использовать для обхода дерева. :) –