Графики хороши и быстры при хранении в SQL, если у вас есть доступ к рекурсивным запросам (что не имеет места в MySQL, но которые доступны в PostgreSQL ) и ваши запросы включают в себя максимумкритерии глубины (что, вероятно, относится к вашей социальной сети), или если они проиндексированы правильно.
Существует несколько способов индексирования графиков.В вашем случае ваш график, вероятно, не плотный, поскольку вы имеете дело с несколькими лесами, которые почти независимы (вы обычно будете иметь дело с тесно кластеризованными группами пользователей), поэтому у вас есть много вариантов.
Самым простым для реализации является транзитивное замыкание (которое, по сути, называется предварительным вычислением всех потенциальных путей).В вашем случае это вполне может быть частичным (скажем, глубина-2 или глубина-3).Это позволяет полностью индексировать связанные узлы в отдельной таблице для очень быстрых запросов графа.Используйте триггеры или хранимые процедуры, чтобы поддерживать его в синхронизации.
Если ваш график более плотный, вы можете захотеть использовать индекс GRIPP .Как и во вложенных наборах, последний работает лучше всего (как в случае с самым быстрым обновлением), если вы удалили свойство (rgt - lft - 1) / 2
= количество дочерних элементов и использовали значения с плавающей запятой для lft / rgt вместо целых чисел.(Это позволяет избежать повторной индексации целых кусков графа при вставке / перемещении узлов.)