Лучший способ моделирования данных графика в postgresql
Как можно хранить и запрашивать разреженные направленные или неориентированные графики в Postgresql. Есть что-то вроде pggraph, но это все еще находится в стадии планирования.
Я понимаю, что выделенные графические базы данных, такие как Neo4J, лучше всего подходят для этого. Однако есть ли способ реализовать это в Postgresql, используя расширение или тип данных, что позволит избежать добавления другой базы данных engine.dtatap >
Ответы
Ответ 1
Вопрос, я думаю, слишком расплывчатый и широкий, чтобы дать точный ответ...
В сущности, однако, существуют некоторые методы эффективного запроса данных графа в базе данных SQL, которые применяются к узкоспециализированным сценариям. Вы можете выбрать индекс GRIPP, например, если ваши интересы лежат в поиске кратчайших путей. (Он в основном работает немного как предзаказанный индекс дерева, применяемый к графикам.) Насколько мне известно, ни один из этих методов еще не стандартизирован.
С учетом сказанного и просмотра вашего комментария, который упоминает социальные сети, шансы на то, что каждый из них будет излишним. Если ваш интерес в первую очередь заключается в извлечении данных, связанных с друзьями-пользователями, или что-то эквивалентное в том смысле, что он составляет запрос в окрестности node, количество узлов, которые вам нужно переходить в соединения, настолько мало, что нет потребность в специализированных инструментах, структурах данных и т.д.: просто используйте рекурсивные CTE.
http://www.postgresql.org/docs/current/static/queries-with.html
Для обеспечения оптимальной производительности при использовании последних сдвиньте столько where
условий в with (...)
части запроса, чтобы устранить узлы раньше.
Ответ 2
Используйте PostgreSQL для базового хранилища и используйте networkX или iGraph через PL/Python для механизма обработки.
В своей книге " Графические базы данных, Ян Робинсон, Джим Уэббер и Эмиль Эйфрем делают различие между базовым хранилищем и механизмом обработки, Если вы посмотрите на ответ, который я выполнил в недавней проблеме (см. здесь), вы увидите, что я использую PostgreSQL для базового хранилища и networkX в качестве механизма обработки, Производительность по сравнению с моим оригинальным решением была огромной (и аналогична той, что описана в книге" Графические базы данных"), и реализовать ее было очень просто.
Ответ 3
Поскольку вопрос является общим, я бы добавил решение, которое может работать в основном с плоскими графами, такими как уличные сети, PostgreSQL предлагает отличное решение с помощью топологии Postgis. В топологии Postgis геометрии хранятся в виде ребер, узлов и граней и их относительных связей. Это означает, что из геометрии уличной сети вы можете выбрать ребра, их начальные и конечные узлы и из этого легко построить график в выбранном вами обработчике (например, networkx или graph-tool для Pyhton).
Как я уже сказал, топология Postgresql/Postgis работает, когда мы хотим изучать геометрии, такие как уличные сети, с точки зрения анализа графиков.
Ответ 4
На этом этапе я бы порекомендовал поэкспериментировать с AgensGraph, многообещающим мультимодельным дистрибутивом PostgreSQL, который предлагает первоклассные графовые базы данных и запросы как из SQL, так и из Cypher. Обратите внимание, что это полноценный сервер, а не расширение, подобное PostGIS, хотя к нему можно добавить расширения PostgreSQL.
Ответ 5
Используйте AgensGraph от bitnine.net https://bitnine.net/
и если вы хотите визуализировать свой график, вы можете использовать AgensBrowser также из bitnine
Спасибо джо