Что такое Memgraph и чем она отличается от Neo4j: сравнение графовых СУБД

Что такое Memgraph и чем она отличается от Neo4j: сравнение графовых СУБД

Содержание

    В рамках продвижения нашего нового курса по графовым алгоритмам в бизнес-приложениях сегодня познакомимся с графовой резидентной СУБД Memgraph и сравним ее с Neo4j, определив достоинства, недостатки и варианты использования в задачах аналитики больших данных.

    Memgraph vs Neo4j

    Memgraph — это высокопроизводительная графовая СУБД с открытым исходным кодом, которая хранит и обрабатывает данные в памяти. Благодаря своему резидентному характеру и языкам разработки (С и C++), она работает очень быстро, а потому отлично подходит для обработки больших объемов данных в реальном времени. Memgraph поддерживает строго согласованные ACID-транзакции и использует язык запросов Cypher, который поддерживается не только в Neo4j, но и в других графовых СУБД, например, в расширении Apache AEG для PostgreSQL, о котором мы недавно рассказывали.

    Memgraph на 10 лет младше Neo4j, которая написана на Java и впервые вышла в 2007 году. Тем не менее, Memgraph имеет надежную архитектуру, способную обеспечить высокопроизводительные транзакционны  и аналитические рабочие нагрузки. Memgraph использует механизм хранения в оперативной памяти, а Neo4j реализует традиционное решение для хранения данных на диске. Именно это отличие является основным между рассматриваемыми графовыми СУБД: хранение данных на диске подходит для большого количества объектов, которые не нужно извлекать очень часто, т.е. OLTP-системы. Memgraph предлагает хранение данных в памяти, ориентированное на потоковую обработку и вычисления в реальном времени. Это подходит для больших графов, которые нужно часто анализировать и получать ответы в реальном времени, т.е. OLAP-системы. Впрочем, при необходимости можно сохранить часть данных Memgraph  из памяти на диск, чтобы ускорить выполнение графовых алгоритмов. Подробнее об этом читайте в нашей новой статье

    Для обоих решений доступно большое количество драйверов на разных языках программирования. Хотя Memgraph поддерживает меньше языков программирования, большинство драйверов Neo4j также можно использовать с Memgraph. Это связано с тем, что оба решения используют протокол Bolt, модель маркированного графа свойств и язык запросов Cypher.

    Memgraph включает готовые коннекторы для платформ потоковой передачи событий Apache Kafka и Pulsar, а также фреймворком Redpanda, о котором мы писали здесь. Neo4j также предлагает плагин Kafka Connect для поддержки потоковой передачи.

    Подобно библиотеке библиотека Graph Data Science с графовыми и ML-алгоритмами, которая есть в Neo4j, Memgraph предлагает расширения MAGE (Memgraph Advanced Graph Extensions)  библиотеку с открытым исходным кодом для запуска графовых алгоритмов, представленных в виде процедур Cypher. Она включает востребованные алгоритмы решения типовых задач на графах, таких как ранжирование (PageRank), обнаружение сообществ и node2vec. Эти алгоритмы адаптированы для потоковой передачи данных, которые необходимо обрабатывать каждый раз раз, когда создается новый узел или связь или обновляются существующие.

    Как и Neo4j, Memgraph является расширяемой системой, которую можно дополнить собственными UDF-функциями. Однако процесс их разработки в Neo4j, реализованной на Java, не так прост, как в Memgraph, ориентированном на Python. Хотя основной механизм Memgraph реализован на C++ для наилучшего использования ресурсов и высокой производительности, пользовательские процедуры (называемые модулями запросов в Memgraph) могут быть написаны на нескольких языках программирования, включая Python. UDF-функции и процедуры могут содержать графовые алгоритмы, служебные инструменты, пользовательские API и пр., и можно вызывать из языка запросов Cypher, как и любой другой запрос, а также комбинировать их с другими функциями, такими как потоки или триггеры.

    Чтобы резюмировать сходства и отличия Memgraph и Neo4j, сравним их по ряду критериев, наиболее важным для выбора решения, и представим это в виде таблицы.

    Критерий

    Neo4j

    Memgraph

    открытость исходного кода

    Открытый исходный код

    Открытый исходный код

    наличие схемы данных

    Возможно по желанию

    Возможно по желанию

    типизация данных

    да

    да

    соответствие ACID-требованиям к транзакциям

    Да, об этом читайте здесь

    Да

    механизмы обеспечения согласованности данных

    Причинно-следственная согласованность и согласованность в конечном счете

    Строгая поддержка согласованности (Immediate Consistency)

    поддержка ANSI-SQL

    нет

    нет

    язык запросов

    Cypher

    Cypher

    предоставляемые API

    Bolt protocol, Java API, Neo4j-OGM, RESTful HTTP API, Spring Data Neo4j, TinkerPop 3

    Bolt protocol

    триггеры

    Да в виде перехватчиков событий

     

    хранимые процедуры

    UDF-функции и процедуры

    UDF-функции и процедуры

    поддерживаемые языки разработки

    .Net, Clojure, Elixir, Go, Groovy, Haskell, Java, JavaScript, Perl, PHP, Python, Ruby, Scala

    .Net, C, C++, Elixir, Go, Haskell, Java, JavaScript, PHP, Python, Ruby, Scala

    репликация данных

    алгоритм консенсуса протокола RAFT в Enterprise-версии

    Через алгоритм консенсуса протокола RAFT

    партиционирование

    Да, с помощью Neo4j Fabric для горизонтального масштабирования через шардирование

    Динамическое шаржирование

    вторичная индексация

    с помощью подключаемых плагинов, по умолчанию Apache Lucene

     

    внешние ключи

    Да, через отношения (ребра) графа

    Да, через отношения (ребра) графа

    поддержка вычислительной модели MapReduce

    нет

    нет

    инструменты обеспечения безопасности и управления доступом к данным

    Пользователи, роли, разрешения. Подключаемая аутентификация LDAP, Active Directory, Kerberos

    Пользователи, роли, разрешения

    Производительность и объем базы данных

    Динамическое сжатие указателей расширяет доступное адресное пространство Neo4j по мере необходимости, позволяя хранить графы любого размера, но не более 34 миллиардов узлов

    Благодаря хранению данных в памяти и резидентным вычислениям, а также языкам реализации C и C++, производительность запросов Cypher в разы выше, чем в Neo4j (до 120 раз). Размер БД ограничен объемом памяти

    стоимость покупки и эксплуатации

    Community-версия бесплатно, стоимость подписки на Neo4j AuraDB начинается с $0,09 в час ($65 в месяц) и зависит от потребления памяти

    Community-версия бесплатно, стоимость подписки на облачный полностью управляемый сервис и Enterprise-версию зависит от потребляемых ресурсов

    специальные возможности

    Библиотека Graph Data Science с графовыми и ML-алгоритмами

    Библиотека MAGE с графовыми и ML-алгоритмами

    варианты использования

    Анализ социальных связей, выявление сообществ, поиск путей

    Анализ социальных связей, выявление сообществ, поиск путей

     

    Таким образом, обе СУБД имеют похожий спектр возможностей и выбор решения зависит от особенностей вариантов использования. Если не требуются оперативные аналитические вычисления в реальном времени, Neo4j будет отличным выбором. В случае высокопроизводительный OLAP-запросов потоковой передачи и разработчиков, вместо Java предпочитающих Python, C++ и Rust, следует выбирать Memgraph.

    В заключение от себя лично отмечу подробную документацию Memgraph и набор обучающих материалов в виде интерактивных уроков со встроенной песочницей, демонстрационными датасетами и запросами. Neo4j тоже, конечно, имеет большой набор обучающих курсов и документацию для пользователей различных категорий (Data Scientist, разработчик, администратор), а также интерактивную консоль. Однако, в Memgraph эти материалы мне показались более наглядными.

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

    Источники

    1. https://memgraph.com/docs/memgraph
    2. https://db-engines.com/en/system/Memgraph%3BNeo4j