Neo4j Graph Database: Introduction and Simple Example

Post on 14-Apr-2017

255 views 0 download

Transcript of Neo4j Graph Database: Introduction and Simple Example

8 июня 2015

Темы лекции

• Что такое графы и графовые базы данных

• Что такое Neo4j и как это готовить

Теория графов

• Леонард Эйлер, 1736 год, задача о семи мостах Кёнигсберга

→ →

• Число нечётных вершин (вершин, к которым ведёт нечётное число рёбер) графа должно быть чётно. Не может

существовать граф, который имел бы нечётное число нечётных вершин.

• Если все вершины графа чётные, то можно, не отрывая карандаша от бумаги, начертить граф, при этом можно

начинать с любой вершины графа и завершить его в той же вершине.

• Граф с более чем двумя нечётными вершинами невозможно начертить одним росчерком.

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

• Основной объект изучения теории графов

• Совокупность непустого множества вершин и наборов пар вершин

Графовые БД

• Разновидность баз данных с реализацией сетевой модели в виде графа и его обобщений.

Что такое Neo4j?

• Графовая СУБД, созданная в 2007 году

• Реализует работу с данными в виде орграфов (ориентированных графов)

Графы - это наиболее эффективный и естественный способ работы с данными

Как выглядит граф в Neo4j

Cypher (Neo4j graph query language)

• Язык запросов в Neo4j

• Похож на SQL

• ASCII-representation

Пример на базе фильмов

• Выбор всех фильмов:

• SELECT * from movies;

• MATCH (movie:Movie) RETURN movie;

• Выбор всех фильмов с их режиссерами:

• SELECT * FROM movies m JOIN directed d ON d.movie_id = m.id JOIN person p ON p.id = d.person_id;

• MATCH (movie:Movie)<-[relation:DIRECTED]-(director:Person) RETURN movie, relation, director;

• Выбор фильма «Облачный атлас» и всех его рецензентов:

• SELECT * FROM movies m JOIN reviewed r ON r.movie_id = m.id JOIN person p ON p.id = d.person_id WHERE m.title = "Cloud Atlas";

• MATCH (movie:Movie {title: "Cloud Atlas"})<-[relation:REVIEWED]-(reviewer:Person) RETURN movie, relation, reviewer;

• MATCH (movie:Movie)<-[relation:REVIEWED]-(reviewer:Person) WHERE movie.title = "Cloud Atlas" RETURN movie, relation, reviewer;

• Выбор всех фильмов где Кинау Ривз играл Нео:

• SELECT * FROM person p JOIN acted a ON a.person_id = p.id AND a.roles IN ("Neo") JOIN movies m ON m.id = a.movie_id WHERE p.name = "Keanu Reeves"

• MATCH (keanu:Person {name: "Keanu Reeves"})-[:ACTED_IN {roles: ["Neo"]}]->(movie:Movie) RETURN keanu, movie;

• Выбор всех коллег Кинау Ривза (актеров которые играли с ним):

• SELECT * FROM person p JOIN acted a ON a.person_id = p.id JOIN movies m ON m.id = a.movie_id JOIN acted a2 ON a2.movie_id = m.id AND a2.person_id != p.id JOIN person p2 ON p2.id = a2.person_id WHERE p.name = "Keanu Reeves"

• MATCH (keanu:Person {name:"Keanu Reeves"})-[:ACTED_IN]->(movie:Movie)<-[:ACTED_IN]-(coActor:Person) RETURN keanu, movie, coActor;

Выбор городов с регионами

Выбор городов в регионе