Поделиться через


Расширение AGE с помощью Базы данных Azure для PostgreSQL

Apache AGE (расширение графа) — это мощное расширение PostgreSQL, предназначенное для плавной интеграции функций базы данных графа в экосистему PostgreSQL. AGE позволяет пользователям эффективно и выразительно хранить и запрашивать данные графа, поддерживая интуитивно понятный язык запросов openCypher, когда разрабатывается в рамках проекта Apache Incubator. Он устраняет разрыв между реляционными и графовыми данными, позволяя разработчикам управлять сложными связями и выявлять понимание, которое традиционные базы данных могут испытывать трудности в выявлении.

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

Разблокировка возможностей данных графа с помощью Apache AGE

Разблокировка возможностей данных графа с помощью Apache AGE позволяет разработчикам использовать полный потенциал взаимосвязанных данных в PostgreSQL. Apache AGE обеспечивает простое изучение и анализ сложных связей путем интеграции функциональных возможностей базы данных графа непосредственно в реляционную базу данных. Эта возможность ценна для приложений, требующих глубокого анализа подключений к данным, таких как социальные сети, обнаружение мошенничества и системы рекомендаций. Благодаря поддержке языка запросов openCypher и надежной основы PostgreSQL, Apache AGE предоставляет масштабируемое и эффективное решение для управления и выполнения запросов по графовым данным.

Ключевые функции Apache AGE

  • Интеграция графов и реляционных данных: AGE позволяет легко взаимодействовать между графами и реляционными данными в PostgreSQL.
  • Язык запросов openCypher: AGE поддерживает этот широко распознаваемый язык запросов для баз данных графов, упрощая запись запросов и обслуживание.
  • Масштабируемость и надежность. В рамках проверенной архитектуры PostgreSQL AGE наследует масштабируемость и надежность корпоративного уровня.

Зачем использовать базу данных графа?

Графовые базы данных отлично подходят для представления и выполнения запросов сложных и высоко связанных отношений. В отличие от реляционных баз данных, которые требуют нескольких соединений или баз данных документов, которые не оптимизированы для глубокого обхода связей, графовые базы данных естественно моделиируют связи между сущностями. Например, выполнение запроса "друзья друзей" или "самый короткий путь между двумя точками" является более интуитивным и эффективным в графовой базе данных.

AGE использует транзакционную систему PostgreSQL, соответствующую свойствам ACID, обеспечивая надежность и атомарность в графовых запросах. Эта интеграция упрощает расширенные приложения, такие как Графы знаний, которые поддерживают поиск на основе ИИ и создания данных путем структурирования фактов и концепций в качестве узлов и их соединений в качестве ребер.

Клиенты Azure могут включить расширение AGE

База данных Azure для PostgreSQL включает Apache AGE в качестве расширения.

Эти действия помогут включить расширение в гибком экземпляре сервера:

Доступ к параметрам сервера

На портале Azure перейдите к гибкому экземпляру сервера PostgreSQL и выберите параметр "Параметры сервера".

Настройте следующие параметры:

  • azure.extensions: найдите и включите AGE среди доступных расширений в фильтре параметров.
  • shared_preload_libraries: Найдите и включите AGE в фильтре параметров.

Нажмите кнопку "Сохранить", чтобы применить эти изменения. Сервер перезапускается автоматически, чтобы активировать расширение AGE.

Замечание

Ошибка включения shared_preload_libraries приводит к следующей ошибке при попытке использовать схему AGE в запросе: "ERROR: необработанный вызов функции cipher(cstring) при первом запросе шифра".

Включение AGE в PostgreSQL

После перезапуска сервера подключитесь к экземпляру PostgreSQL с помощью интерпретатора psql. Выполните следующую команду, чтобы включить AGE:

CREATE EXTENSION IF NOT EXISTS AGE CASCADE;

После успешного выполнения вы увидите CREATE EXTENSION результат запроса.

Вы также можете запросить таблицу каталога pg_extension, чтобы убедиться, что AGE включена; кроме того, проверьте версию расширения.

SELECT * FROM pg_extension WHERE extname = 'age';

Настройка путей схемы

AGE добавляет схему с именем ag_catalog, необходимую для обработки данных графа. Убедитесь, что эта схема включена в путь поиска, выполнив следующее:

SET search_path=ag_catalog,"$user",public;

Для Python можно задать путь схемы, выполнив следующие действия:

import psycopg as pg
with pg.Connection.connect(con_str + " options='-c search_path=ag_catalog,\"$user\",public'") as con:

Его также можно настроить программным способом в приложении.

Выполнив эти действия, вы убедитесь, что экземпляр PostgreSQL правильно настроен для использования возможностей расширения AGE. Расширение AGE предоставляет расширенные возможности графовых баз данных непосредственно в PostgreSQL. Эта конфигурация позволяет плавно интегрировать запросы графов в ваши приложения, раскрывая мощные связи данных и аналитическую информацию. С включенным и настроенным расширением AGE теперь можно изучить полный потенциал аналитики графов в среде PostgreSQL.

Важные таблицы в схеме ag_catalog

  • ag_graph
  • ag_label

ag_graph

Таблица ag_graph в схеме ag_catalog Apache AGE служит репозиторием для метаданных, связанных с графами, созданными в PostgreSQL через ag_catalog.create_graph функцию. В частности, он поддерживает такие сведения, как имя графа и связанное пространство имен, которое выступает в качестве схемы в PostgreSQL. Это пространство имен упорядочивает структуру графа и содержит таблицы для хранения вершин и пограничных данных.

\d+ ag_graph
                                          Table "ag_catalog.ag_graph"
 Column   |     Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
-----------+--------------+-----------+----------+---------+---------+-------------+--------------+-------------
 graphid   | oid |           | not null |         | plain   |             |              |
 name | name |           | not null |         | plain   |             |              |
 namespace | regnamespace |           | not null |         | plain   |             |              |
Indexes:
    "ag_graph_graphid_index" UNIQUE, btree (graphid)
    "ag_graph_name_index" UNIQUE, btree (name)
    "ag_graph_namespace_index" UNIQUE, btree (namespace)
Referenced by:
    TABLE "ag_label" CONSTRAINT "fk_graph_oid" FOREIGN KEY (graph) REFERENCES ag_graph(graphid)
Access method: heap

ag_label

В таблице ag_label хранятся метаданные о метках, используемых в графах AGE. Он отслеживает эти метки, связывая их с соответствующими графами и определяя, представляют ли они вершины или края. Запись содержит уникальный идентификатор метки, связанный граф, все индексы и базовую таблицу PostgreSQL, в которой хранятся данные.

\d+ ag_label
                                   Table "ag_catalog.ag_label"
 Column  |    Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
----------+------------+-----------+----------+---------+---------+-------------+--------------+-------------
 name | name |           | not null |         | plain   |             |              |
 graph    | oid |           | not null |         | plain   |             |              |
 id       | label_id   |           |          |         | plain   |             |              |
 kind     | label_kind |           |          |         | plain   |             |              |
 relation | regclass   |           | not null |         | plain   |             |              |
 seq_name | name |           | not null |         | plain   |             |              |
Indexes:
"ag_label_graph_oid_index" UNIQUE, btree (graph, id)
"ag_label_name_graph_index" UNIQUE, btree (name, graph)
"ag_label_relation_index" UNIQUE, btree (relation)
"ag_label_seq_name_graph_index" UNIQUE, btree (seq_name, graph)
Foreign-key constraints:
- `fk_graph_oid` FOREIGN KEY (graph) REFERENCES ag_graph(graphid)
Access method: heap