LINUX.ORG.RU

Помогите разработать архитектуру БД


0

1

Добрый день.

Хотел бы попросить совета у «лоровцев» в разработке архитектуры БД.

Исходные данные:

ОС: Linux СУБД: MySQL ОЗУ: 16Гб

Вопрос:

Скажем есть 100 клиентов (хранящихся в БД), у каждого клиента есть дерево категорий (у каждого собственное дерево, со своими элементами и под–элементами). Так вот, как организовать хранение категорий с их вложенностями в одной таблице? Хотелось бы использовать при этом Nested Set. Но, насколько мне известно, Nested Set может работать только в рамках одного дерева в одной таблице.

★★★

Ответ на: комментарий от KRoN73

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

VirRaa ★★★
() автор топика
Ответ на: комментарий от VirRaa

Кто вам сказал, что это лучший способ хранения деревьев? Nested Set удобны при выборке, но модификация дерева занимает значительное время. На больших деревьях будет жутко тормозить. Лучше чем списки смежности ничего не придумано

yanka ★★
()
Ответ на: комментарий от VirRaa

На правах анонимуса побуду капитаном Очевидность: выбор как именно хранить структуру зависит от задачи. Какие операции производятся чаще (вставка, удаление, модификация), на сколько большим будет дерево и тд. Можно сделать несколько вариантов хранения (nested set или что-то другое) и проверить как будет вести себя эта структрура именно на вашей задаче. Крон73 предложил правильный и универсальный метод. И полезная ссылка http://habrahabr.ru/blogs/development/47280/

anonymous
()

>Но, насколько мне известно, Nested Set может работать только в рамках одного дерева в одной таблице.

Почему? Ставь каждому дереву tree_id и работай с учётом этого.

anonymous
()

KRoN73 дал довольно неплохой вариант.

drakmail ★★★★
()
Ответ на: комментарий от KRoN73

Смысл использовать LIKE какой? parent_path='1;2;3' OR (parent_path > '1;2;3;' AND parent_path < '1;2;3<') будет в несколько сотен раз быстрее

tarc
()
Ответ на: комментарий от tarc
mysql> select benchmark(100000000, (select count(*) from forums where tree_map like '7.%'));
+-------------------------------------------------------------------------------+
| benchmark(100000000, (select count(*) from forums where tree_map like '7.%')) |
+-------------------------------------------------------------------------------+
|                                                                             0 |
+-------------------------------------------------------------------------------+
1 row in set (2.43 sec)

mysql> select benchmark(100000000, (select count(*) from forums where tree_map = '7.' OR (tree_map>'7.' AND tree_map <'7/')));
+-----------------------------------------------------------------------------------------------------------------+
| benchmark(100000000, (select count(*) from forums where tree_map = '7.' OR (tree_map>'7.' AND tree_map <'7/'))) |
+-----------------------------------------------------------------------------------------------------------------+
|                                                                                                               0 |
+-----------------------------------------------------------------------------------------------------------------+
1 row in set (2.43 sec)
KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Сколько у тебя форумов? Если несколько десятков, то замеры которые ты привел не показательны, к тому же результаты обоих запросов наверняка закешировались. Я померял на дереве с несколькими миллионами узлов, разница как я и говорил 2-3 порядка.

tarc
()
Ответ на: комментарий от VirRaa

> Я же сказал, что хочу использовать Nested Set

не ну вы посмотрите на этого умника)) ты ж за советом сюда пришел! Сделай parent_id как тебе люди говорят и не умничай...

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

я так понимаю опыта в «хранении деревьев» завались, да?))

anonymous
()

> Но, насколько мне известно, Nested Set может работать только в рамках одного дерева в одной таблице.

Это прекрасно )) «насколько мне известно»))

Капитан намекает, что прикручивание user_id к табличке дерева и использование его в запросах сделает из одного дерева множество.

kost-bebix ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.