Как организовать быстро растущую иерархическую таблицу?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
EVOSandru6
Сообщения: 605
Зарегистрирован: 2014.07.04, 13:33

Как организовать быстро растущую иерархическую таблицу?

Сообщение EVOSandru6 »

Добрый день,

Подскажите пожалуйста - как бы Вы организовали структуру таблицы с иерархическими комментариями? На самом деле таблица хранит не комментарии, но на мой взгляд - это самый удачный пример.

Рассматриваю несколько вариантов. Nested Set (потеря при записи и обновлении - перезаписываение крайних ключей) и

adjacency-list(рекурсия при построении потомков-предков) Подразумевается нехилый темп роста данных.
Еще рассматривал Nested Set с использованием нескольких деревьев в одной таблице. Но не знаю как это скажется на производительности.

Есть ли подобные решения для Yii2 (поведения). Имеется ввиду не NestedSetBehavior в чистом виде, а поведение на основе правильного решения структуры и хранения по поводу моего вопроса.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Как организовать быстро растущую иерархическую таблицу?

Сообщение samdark »

1. Какая вложенность?
2. Насколько часто читаете?
3. Читаете ли поддеревья или только деревья целиком?
4. Какого рода ещё выборки?
5. Насколько часто добавляете, удаляете или перемещаете?
EVOSandru6
Сообщения: 605
Зарегистрирован: 2014.07.04, 13:33

Re: Как организовать быстро растущую иерархическую таблицу?

Сообщение EVOSandru6 »

samdark писал(а): 2017.08.22, 11:04 1. Какая вложенность?
2. Насколько часто читаете?
3. Читаете ли поддеревья или только деревья целиком?
4. Какого рода ещё выборки?
5. Насколько часто добавляете, удаляете или перемещаете?
Приветствую, Александр!

1. Вложенность: 1-2 уровня
2. Читаем чаще,чем добавляем
3. ? - тут мой вопрос
4. Из сущности предложения выбираются сущности лотов

Лот может быть как без вложений (например со значением - на X персон)

.1 персона
.2 персоны
.3 персоны

Лот может быть иерархичным:

.1-2 дня
..1 персона - цена
..2 персоны - цена
..3 персоны - цена
.3-4 дня
..1 персона - цена
..2 персоны - цена
..3 персоны - цена

5. Удаления крайне редки, обновления редки, но возможны, в основном добавления.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Как организовать быстро растущую иерархическую таблицу?

Сообщение samdark »

3. Например, выбрать поддерево основного дерева начиная с вершины такой-то:

Код: Выделить всё

A
   - B
       - C
       - D
   - E
Выбрать поддерево начиная с B. Отдаст вам:

Код: Выделить всё

 B
    - C
    - D
Если такие запросы не нужны, вам обычный adjacent list вполне подойдёт.
EVOSandru6
Сообщения: 605
Зарегистрирован: 2014.07.04, 13:33

Re: Как организовать быстро растущую иерархическую таблицу?

Сообщение EVOSandru6 »

samdark писал(а): 2017.08.22, 19:51 3. Например, выбрать поддерево основного дерева начиная с вершины такой-то:

Код: Выделить всё

A
   - B
       - C
       - D
   - E
Выбрать поддерево начиная с B. Отдаст вам:

Код: Выделить всё

 B
    - C
    - D
Если такие запросы не нужны, вам обычный adjacent list вполне подойдёт.
Благодарю, Александр. Попробую оба варианта.
Ответить