В рамках продвижения нашего нового курса по графовым алгоритмам в бизнес-приложениях сегодня познакомимся с графовой резидентной СУБД 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. Эти алгоритмы адаптированы для потоковой передачи данных, которые необходимо обрабатывать каждый раз раз, когда создается новый узел или связь или обновляются существующие.
Графовые алгоритмы. Бизнес-приложения
Код курса
GRAF
Ближайшая дата курса
по запросу
Продолжительность
24 ак.часов
Стоимость обучения
54 000 руб.
Как и Neo4j, Memgraph является расширяемой системой, которую можно дополнить собственными UDF-функциями. Однако процесс их разработки в Neo4j, реализованной на Java, не так прост, как в Memgraph, ориентированном на Python. Хотя основной механизм Memgraph реализован на C++ для наилучшего использования ресурсов и высокой производительности, пользовательские процедуры (называемые модулями запросов в Memgraph) могут быть написаны на нескольких языках программирования, включая Python. UDF-функции и процедуры могут содержать графовые алгоритмы, служебные инструменты, пользовательские API и пр., и можно вызывать из языка запросов Cypher, как и любой другой запрос, а также комбинировать их с другими функциями, такими как потоки или триггеры.
Чтобы резюмировать сходства и отличия Memgraph и Neo4j, сравним их по ряду критериев, наиболее важным для выбора решения, и представим это в виде таблицы.
Критерий |
Neo4j |
Memgraph |
открытость исходного кода |
Открытый исходный код |
Открытый исходный код |
наличие схемы данных |
Возможно по желанию |
Возможно по желанию |
типизация данных |
да |
да |
соответствие ACID-требованиям к транзакциям |
Да, об этом читайте здесь |
Да |
механизмы обеспечения согласованности данных |
Причинно-следственная согласованность и согласованность в конечном счете |
Строгая поддержка согласованности (Immediate Consistency) |
поддержка ANSI-SQL |
нет |
нет |
язык запросов |
||
предоставляемые 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 в Москве:
Источники