Установка Neo4J на сервер Ubuntu

Основные понятия

Что такое граф?

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

Что такое вершины и ребра?

  • Вершины (или узлы) графа – это точки данных в графе. Пользователи, знакомые с базами данных SQL, могут представить себе вершину как пересечение столбца и строки.
  • Ребро (или дуга) графа – это взаимосвязь между двумя различными вершинами. Ребро трудно перевести на язык SQL, поскольку в графовых БД они очень гибки; в целом, ребро можно рассматривать как способ соединения двух элементов данных.

Пример графа

Социальная сеть – наилучший пример графа. В социальной сети есть пользователи и взаимоотношения между пользователями. Согласно графовым БД, пользователи являются вершинами, а взаимоотношения между ними – ребрами. В сетях существует множество различных типов отношений (например, семейное положение, дружба, сотрудничество и т.п.). То же самое происходит и в графах. существует огромное количество видов ребер и вершин.

Взвешенные графы

Рассмотрим в качестве примера авиакомпанию. При перелете самолета из пункта А в пункт В нужно выбрать наиболее удобный путь из всех возможных. Представьте аэропорты как вершины графа, а траектории полета между ними – как ребра.

Вес ребра – это некое значение, поставленное в соответствие каждому ребру взвешенного графа. В данном примере это может быть стоимость перелета или расстояние между пунктами (вершинами).

Взвешенные графы особенно полезны в представлении географических данных, где расстояние имеет огромное значение.

Графовые базы данных

Графовая база данных – это БД NoSQL, хранящая информацию в качестве вершин и ребер (или узлов и дуг).

Вместо ключей и операторов выбора для запроса данных используются ребра или обходы графа (graph traversal). Этот метод запроса данных имеет чрезвычайную мощность во многих областях (например, в социальных сетях, биологии, химии, бизнес-аналитике), в целом – в любой ситуации, когда данные лучше представить в виде элементов, которые вязаны с другими элементами в наборе данных.

Это руководство продемонстрирует установку Neo4J – очень популярной графовой базы данных с огромным количеством языковых привязок, способной работать почти с любым языком программирования.

Установка Neo4J

Внесите ключ Neo4J в менеджер пакетов apt:

wget -O - http://debian.neo4j.org/neotechnology.gpg.key | apt-key add -

Добавьте Neo4J в список исходных кодов apt:

echo 'deb http://debian.neo4j.org/repo stable/' > /etc/apt/sources.list.d/neo4j.list

Обновите менеджер пакетов:

apt-get update

Установите Neo4J:

apt-get install neo4j

База данных Neo4J должна быть запущена. Чтобы проверить это, используйте команду:

service neo4j-service status

Интерфейс RESTful и язык запросов Cypher

Среди преимуществ Neo4J можно выделить очень простой в использовании  интерфейс RESTful, который совместим с любым языком программирования, способным отправлять запросы. Многие операции выполняются в базе данных Neo4J при помощи Cypher. Cypher – это язык запросов, который БД Neo4J использует для управления и чтения данных. То есть, Cypher к Neo4J – как SQL к MySQL.

Структура веб-запроса к интерфейсу RESTful выглядит так:

curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://SERVERNAME:7474/db/data/cypher -d '{
"query" : "CYPHER QUERY GOES HERE",
"params" : {
QUERY PARAMETERS GO HERE
}
}'

Внесение данных в Neo4J

Итак, попробуйте добавить некоторые данные в БД Neo4J.

Создайте новый узел:

curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://localhost:7474/db/data/cypher -d '{
"query" : "CREATE (n:Person { name : {name} }) RETURN n",
"params" : {
"name" : "Foo"
}
}'

Как говорилось ранее, графовые базы данных хранят информацию в узлах (или вершинах) и ребрах (дугах). Для создания ребра нужно минимум 2 узла; создайте еще один узел.

curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://localhost:7474/db/data/cypher -d '{
"query" : "CREATE (n:Person { name : {name} }) RETURN n",
"params" : {
"name" : "Bar"
}
}'

Теперь их можно связать ребром.

curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://localhost:7474/db/data/node/0/relationships -d '{
"to" : "http://localhost:7474/db/data/node/1",
"type" : "Comes Before"
}
}'

Создание запросов при помощи Cypher

Ниже приведены примеры запросов Cypher, которые можно использовать, чтобы просмотреть ранее внесенные данные.

Можно начать с первого узла и запросить все подключенные узлы и соответствующие ребра:

curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://localhost:7474/db/data/cypher -d '{
"query" : "MATCH (x {name: {startName}})-[r]->(n) RETURN type(r), n.name",
"params" : {
"startName" : "Foo"
}
}'

Чтобы получить имена всех узлов в графе, запустите:

Примечание: выполнять на больших графах не рекомендуется.

curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://localhost:7474/db/data/cypher -d '{
"query" : "START n = node(*) return n.name",
"params" : {
}
}'

Чтобы получить все типы ребер графа, используйте:

Примечание: выполнять на больших графах не рекомендуется.

curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://localhost:7474/db/data/cypher -d '{
"query" : "START r=rel(*) return type(r) ",
"params" : {
}
}'

Более подробную информацию и список методов интерфейса RESTful можно найти по этой ссылке. Инструкции по использованию Cypher можно найти здесь.

Tags: , , , , ,

Добавить комментарий