Подтвердить что ты не робот

Лучший способ моделирования данных графика в postgresql

Как можно хранить и запрашивать разреженные направленные или неориентированные графики в Postgresql. Есть что-то вроде pggraph, но это все еще находится в стадии планирования.

Я понимаю, что выделенные графические базы данных, такие как Neo4J, лучше всего подходят для этого. Однако есть ли способ реализовать это в Postgresql, используя расширение или тип данных, что позволит избежать добавления другой базы данных engine.dtata​​p >

4b9b3361

Ответ 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

Спасибо джо