Графовая аналитика в Greenplum и PostgreSQL: обзор расширений и возможностей

графовые алгоритмы на больших данных в Greenplum примеры курсы обучение, Greenplum графы примеры курсы обучение, обработка графовых данных в Greenplum и PostgreSQL графы, обучение Greenplum Madlib, обучение Arenadata DB курсы, Greenplum для инженеров данных и и разработчиков, Greenplum MADlib Data Science, хранение и аналитика больших данных с Greenplum, Школа Больших Данных Учебный центр Коммерсант

Инструменты графовых алгоритмов для аналитики больших данных в PostgreSQL и Greenplum: обзор расширений и возможностей. Знакомимся с Apache AGE и MADlib.

Графовая аналитика в PostgreSQL

Реляционные СУБД отлично подходят для хранения данных с четкой структурой практически в любой предметной области и предлагают широкие возможности аналитической обработки таких данных. Но иногда реляционная модель имеет низкую производительность, и/или становится слишком сложной. Также многократно возрастает сложность аналитических SQL-запросов, что мы разбирали в статье блога нашей Школы прикладного бизнес-анализа. Это характерно для сценариев, когда отношения имеют такое же или даже большее значение, что и сами сущности. Например, при анализе социальных связей, логистических маршрутов, поиске мошеннических случаев, выявлении сообществ и пр. Такие задачи отлично решаются средствами графовых алгоритмов. Как правило, наилучшую реализацию графовых алгоритмов для больших объемов данных предлагают специальные графовые СУБД: Neo4j, TigerGraph, Giraph, InfoGrid и др. О возможностях Neo4j и TigerGraph мы недавно писали здесь.

Однако, иногда необходимо применить графовые алгоритмы к данным, хранящимся в реляционной базе. Это не всегда возможно штатными средствами реляционной СУБД. Однако, например, в популярной объектно-реляционной базе данных PostgreSQL, на которой основана MPP-СУБД Greenplum, для графовой аналитики можно установить соответствующие расширения. Следует отметить, что возможность устанавливать готовые расширения, а также писать собственные, является приятным бонусом PostgreSQL. В частности, недавно мы рассказывали про расширение PostGIS для работы с координатами и геопространственными расчетами, которое также поддерживается в Greenplum.

Для поддержки графовых моделей в PostgreSQL можно установить расширение Apache AGE (A Graph Extension) на основе ответвления PostgreSQL 10 от Bitnine и мультимодельной базы данных AgensGraph. Это расширение добавляет к штатным функциям PostgreSQL возможности графовой СУБД, позволяя использовать стандартные ANSI SQL-запросы вместе с графовым языком openCypher, основанным на Cypher, используемом в Neo4j. Это означает, что разработчик может смешивать SQL-запросы к таблицам с запросами OpenCyhpher к графам. Хотя напрямую Cypher-запрос нельзя использовать в самостоятельном выражении, а только в предложении FROM SQL-запроса, его можно также поместить в подзапрос, и он будет вести себя как SQL-запрос:

SELECT t.name FROM schema_name.sql_person AS t
where t.name = (
    SELECT a
    FROM cypher('graph_name', $$
    	  MATCH (v)
        RETURN v.name
    $$) as (name varchar(50))
    ORDER BY name
    LIMIT 1);

Вспомнив средства графовой аналитики в PostgreSQL, посмотрим, как это реализуется в MPP-СУБД Greenplum.

Анализ графов в Greenplum

Для работы с графами Greenplum использует библиотеку MADlib, позволяя  выполнять графовые вычисления без перемещения данных в специализированную графовую СУБД. Также в Greenplum можно вызывать графовые функции, используя привычный язык SQL-запросов. В частности, для алгоритма PageRank это будет выглядеть так:

SELECT madlib.pagerank('vertex',     -- Vertex table
               'id',                 -- Vertex id column
               'edge',               -- Edge table
               'src=src, dest=dest', -- Comma delimited string of edge arguments
               'pagerank_out',       -- Output table of PageRank
                0.5);                -- Damping factor
SELECT * FROM pagerank_out ORDER BY pagerank DESC;

Напомним, Apache MADlib представляет собой библиотеку с открытым исходным кодом для масштабируемой аналитики в базе данных. Она обеспечивает параллельную реализацию математических, статистических, графовых и методов машинного обучения для структурированных и неструктурированных данных. Пример использования Apache MADlib в Greenplum с PXF для классификации изображений методами глубокого обучения мы рассматривали здесь.

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

Greenplum graph analytics
Графы в Greenplum

Сделаем это с помощью обычных SQL-запросов:

CREATE TABLE vertex(id INTEGER);
CREATE TABLE edge(        
         src INTEGER,       
         dest INTEGER,          
         weight FLOAT8       
         );

Заполним созданные таблицы значениями:

INSERT INTO vertex VALUES
(0),(1),(2),(3),(4),
(5),(6),(7);

INSERT INTO edge VALUES
(0, 1, 1.0), (0, 2, 1.0),(0, 4, 10.0),
(1, 2, 2.0), (1, 3, 10.0), (2, 3, 1.0),
(2, 5, 1.0),(2, 6, 3.0),(3, 0, 1.0),
(4, 0, -2.0),(5, 6, 1.0),(6, 7, 1.0);

Применим к этому графу алгоритм кратчайших путей для всех пар (All Pairs Shortest Paths, APSP) находит длину (суммированные веса) кратчайших путей между всеми парами вершин, так что сумма весов ребер пути минимальна.

graph_apsp(
vertex_table, vertex_id, edge_table,           
edge_args, out_table, grouping_cols         
)

Хотя графовые модули библиотеки MADlib для Greenplum поддерживают не все многообразие алгоритмов, которыми можно решать задачи на графах, для большинства случаев их вполне достаточно. Таким образом, если возникла необходимость применить несложные графовые функции к данным, хранящимся в Greenplum и PostgreSQL, можно это сделать, используя соответствующие расширения без копирования данных в специальную графовую NoSQL-СУБД. Читайте в нашей новой статье, как Greenplum и PostgreSQL работают с JSON-данными. А здесь вы узнаете, что такое мультимодельная СУБД, как реализуется поддержка нескольких моделей данных и почему истинно универсальных баз данных не существует.

Узнайте больше подробностей про администрирование и эксплуатацию Greenplum с Arenadata DB для эффективного хранения и аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. https://age.apache.org/age-manual/master/intro/overview.html
  2. https://www.fabiomarini.net/going-multi-model-with-postgresql-and-apache-age-experimenting-with-graph-databases/
  3. https://www.fabiomarini.net/postgresql-with-apache-age-playing-more-seriously-with-graph-databases/
  4. https://docs.vmware.com/en/VMware-Tanzu-Greenplum/7/greenplum-database/GUID-analytics-graph.html
Поиск по сайту