граф базы данных для социальной сети - PullRequest
1 голос
/ 07 июня 2011

Я делаю систему, похожую на социальную сеть. Максимальное количество пользователей должно быть в лучшем случае 50.000 или 70.000.

В данный момент я использую mysqli + подготовленные отчеты. В ERD теперь 30 таблиц, в итоге может достигнуть 40 таблиц.

Итак, мой вопрос: я никогда не использовал графовую базу данных ... У меня ERD, созданный MySQL, и некоторый код уже разработан. Для ожидаемого числа пользователей в этом проекте рекомендуется изменить MySQL на графическую базу данных? мой код sql и модель базы данных можно получить? есть ли преимущество с этим изменением?

что ты думаешь?

спасибо

1 Ответ

3 голосов
/ 08 июня 2011

Графики хороши и быстры при хранении в SQL, если у вас есть доступ к рекурсивным запросам (что не имеет места в MySQL, но которые доступны в PostgreSQL ) и ваши запросы включают в себя максимумкритерии глубины (что, вероятно, относится к вашей социальной сети), или если они проиндексированы правильно.

Существует несколько способов индексирования графиков.В вашем случае ваш график, вероятно, не плотный, поскольку вы имеете дело с несколькими лесами, которые почти независимы (вы обычно будете иметь дело с тесно кластеризованными группами пользователей), поэтому у вас есть много вариантов.

Самым простым для реализации является транзитивное замыкание (которое, по сути, называется предварительным вычислением всех потенциальных путей).В вашем случае это вполне может быть частичным (скажем, глубина-2 или глубина-3).Это позволяет полностью индексировать связанные узлы в отдельной таблице для очень быстрых запросов графа.Используйте триггеры или хранимые процедуры, чтобы поддерживать его в синхронизации.

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

...