Neo4j Graph Database: Introduction and Simple Example
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;
Выбор городов с регионами
Выбор городов в регионе