Neo4j graph data base
Теги: data-bases graphs
Графовая база neo4j реализует эффективные алгоритмы запросов к графу. Особенности:
- реализует модель направленного графа со свойствами - узлы и связи содержат связи, связи реализуют направление.
- в neo4j свойства хранятся в виде пар ключ-значение отдельно от графа, где ключ это строка, а значение - java строка в определенном для этого динамическое хранилище
- сам граф хранится в виде смежности без индексов (index-free adjacencee) - каждый узел содержит ссылки на смежные с ним узлы. Время исполнения запроса зависит не от общего размера графа, а от размера подграфа, задействованногно в поиске, что наиболее эффективно для запросов, исследующих окрестность начального узла. Для сложных запросов реализуется модель in-memory графа, когда необходимый для выполнения запроса подграф предварительно катологизируется в память машины.
- бд поддерживает встраивание значений свойств непосредственно в файл хранения свойств, что для определенных задач (к примеру для коротких значений типа индексов почты) снижает число операций ввод/вывод. кроме того, оптимизируется и хранение имен свойств.
- узлы могут размечаться метками, что позволяет их группировать
- связи имеют только один исходящий узел и один входящий (модель не предусматривает мультисвязей)
- поддержка транзакций. Блокируются операции записи узлов, участвующих в транзакции. Используется журнал предварительной регистрации записи для гарантий завершения транзакции.
- реализует репликацию на базе схемы ведущий сервер - подчиненные
- производится разделение трафика чтения и записи - в основной реализации запись ведется только на ведущий сервер, а чтение только с ведомых
- доступен распределенный кэш для ускорения процедуры запросов
- реализован очень быстрый первоначальный импорт данных (инициализация) и пакетный импорт из csv
- язык запросов - [cypher]
- есть gui endpoint для визуализации запросов
- продукт разделен на комьюнити и энтерпрайз версию. Первый вариант ограничен по производительности
- собственная библиотека графовых алгоритмов
neo4j реализует два типа поддержки - встроенную и серверную.
Встроенный режим - бд запускается в одном процессе с приложением. Преимущество:
- быстрый отклик
- большой выбор интерфейсов
- управление транзакциями
Недостатки:
- только виртуальная машина java
- звыисимость от сборки мусора, как следствие - длинные паузы между сборками, приводящие к увеличению времени выполнения запросов
- жизненный цикл БД целиком и полностью связан с приложением
В серверном режиме экземпляры бд запускаются на собственных серверах и доступны через интерфейсы. Преимущества:
- доступ по Rest api
- не зависит от использующего приложения
- легко масштабируется
- не зависит от сборщиков мусора
Недостатки:
- накладные расходы сети
- проблемы с транзакциями, собирающими большое число запросов
- сложности с шардитрованием очень больших графов (большие расходы на переходы из одного сегмента графа в другой по сети)
Смотир еще:
- документация
- [cypher]
- [python-api-neo4j]
- [pytoneo]
- [neo4j-apoc]
- [neo4j-ml]
- [neosematics] (n10s) is a plugin that enables the use of RDF and its associated vocabularies like (OWL,RDFS,SKOS and others) in Neo4
- Natural Language Processing (NLP)
- graph-data-science-client A Python client for the Neo4j Graph Data Science (GDS) library (sorce is hosted on Amazon)
- docker container
- neo4jupyter A quick visualization tool for Jupyter and Neo4J (not great)
- SciGraph Represent ontologies and ontology-encoded knowledge in a neo4j graph.
- [trinity] A VSCode extension for [cypher] and Neo4j (very weak)
- Neo4j web brouser dedicated installation
- yworks.com Niils and solutions for graph and diagram visualizing. demos
- Data Explorer for Neo4jю The free tool to visualize and explore graph database
- yFiles Graphs for Jupyter. How use. Repo
- pyingest. A script for loading CSV and JSON files into a Neo4j . It performs well due to several factors: Records are grouped into configurable-sized chunks before ingest. For CSV files, we leverage the optimized CSV parsing capabilities of the Pandas library. For JSON files, we use a streaming JSON parser (ijson) to avoid reading the entire document into memorydatabase written in Python3
- [apache-spark] Unified engine for large-scale data analytics
- [dgraph]
- [mongodb]
Полезные ресурсы:
- How to reset / clear / delete neo4j database?
- Bite-Sized Neo4j for Data Scientists repo and videos
- docker how-to
- docker-compose how to
- User Defined Procedures and Functions
- Operators
- Temporal values
- Temporal functions - instant types
- Lists
- Property, structural, and constructed values
- Maps
- Dates, datetimes, and durations
- Test if relationship exists in neo4j / spring data
- EXISTS subqueries
- Parameters
- Data types and mapping to Cypher types
- Scalar functions
- Constraints
- Create, show, and drop constraints
- Check whether a node exists, if not create