SlideShare a Scribd company logo
Дорожная сеть в графовой базе
данных Neo4j
Вадим Шашенко

2gis.ru

@rnd2gis
Создание карты

2
Для конечных продуктов

→

3
Карта

4
С дорожным графом

5
Проверка графа на связность
• Существование маршрута между двумя любыми вершинами
• Алгоритм требует обхода всех вершин и всех ребер
• Параметризация проверки (тип транспорта, время)

6
Геометрия дорожной сети

7
Граф дорожной сети

→

8
Фрагмент реального графа

9
Побольше

10
Еще побольше

11
Всё вместе
Всё покрытие 2ГИС

• 85 городов России (все с нас. более 300 тыс.)
• 3 города Казахстана
• 2 города Украины
• 1 город Италии и Кипра

Ждем новые города с плотной дорожной сетью

12
Характеристики графа
• 2.3 млн вершин
• 5.5 млн ребер
• 9 млн атрибутов

Это стартовые данные

13
Проблема
На нашей старой системе проверка связности на Москве:

• Без параметров – 30 минут
• С параметрами – 4-6 часов

14
Проблема
Данных много
Хочется:
• Меньше ожидание пользователя
• Больше rps

Поэтому нам нужна быстрая обработка графа

15
Задача
• Геометрия дорожной сети в реляционной БД
• Проверка на связность
• Делать это быстро
• Частые запуски проверок
• Часто меняющийся граф

16
17

Решение задачи

VS
Решения на RDBMS
• Закачать весь граф в память (pgRouting)
• Быстрый обход графа
• Ограничены памятью
• Геометрия в БД меняется

18
Решения на RDBMS
• Закачать весь граф в память (pgRouting)
• Быстрый обход графа
• Ограничены памятью
• Геометрия в БД меняется
• Работать в таблице ребер (рекурсивный поиск ребра в таблице)
• Не ограничены памятью
• Очень медленный обход графа

19
Обход графа в таблице

20
Решения на RDBMS
• Закачать весь граф в память (pgRouting)
• Быстрый обход графа
• Ограничены памятью
• Геометрия в БД меняется
• Работать в таблице ребер (рекурсивный поиск ребра в таблице)
• Очень медленный обход графа
• Не ограничены памятью

Наша старая система - схожий с RDBMS принцип - 30 минут

21
Решения на NoSQL – графовая база
данных Neo4j
• Загрузили все наши данные
• Потестировали алгоритмы обхода графа

22
Решения на NoSQL – графовая база
данных Neo4j
• Загрузили все наши данные
• Потестировали алгоритмы обхода графа
• Обход графа поиском в глубину – 1 мин
• Проверка связности графа на Москве – 15 секунд
• Проверка связности всего графа – 10 мин
• Не зависит от количества данных в хранилище

23
Проверка на связность Москвы

24
Обход графа RDBMS vs Neo4j

VS

25
Обзор Neo4j
• Естественная работа с математическим графом
• Вершины, ребра, атрибуты
• Язык запросов cypher
• Индексы на значения атрибутов
• ACID
• REST API. Веб-админка
• Расширения-плагины
• Open source. Java.

26
Почему именно Neo4j
• Самая популярная из графовых баз данных
• Богатый функционал
• Активная разработка
• Живое сообщество
• Готовые сторонние расширения: пространственный индекс, разные
алгоритмы на графе, импортер из csv.
• Коннекторы из множества языков программирования

27
Недостатки Neo4j
• Нет горизонтального масштабирования
• Удаление из бд не освобождает место на диске (требуется рестарт)

28
Архитектура нашего решения

29
Возможные оптимизации
• Разбиение на подграфы
• Иерархичность

30
Мы довольны
• Будем продолжать использовать
• Будем наблюдать за поведением с ростом данных

31
Итог
Есть много данных, которые можно представить графом?
Нужна быстрая работа графовых алгоритмов?
Стоит попробовать Neo4j.

32
33

Теперь вы
Вадим Шашенко

v.shashenko@2gis.ru

More Related Content

What's hot

«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС «Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
2ГИС Технологии
 
Jinba - frontendconf.ru/2015
Jinba - frontendconf.ru/2015Jinba - frontendconf.ru/2015
Jinba - frontendconf.ru/2015
Pavel Dovbush
 
Developing high load systems using C++
Developing high load systems using C++Developing high load systems using C++
Developing high load systems using C++
Ciklum Ukraine
 
"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro
"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro
"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro
it-people
 
Перевод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQLПеревод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQL
Dmitry Kremer
 
Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)
Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)
Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)
Ontico
 
Pulsedb — система хранения временных рядов
Pulsedb — система хранения временных рядовPulsedb — система хранения временных рядов
Pulsedb — система хранения временных рядов
Max Lapshin
 
Andrey Borodin "Architecture of online backup for various DBMS"
Andrey Borodin "Architecture of online backup for various DBMS"Andrey Borodin "Architecture of online backup for various DBMS"
Andrey Borodin "Architecture of online backup for various DBMS"
Fwdays
 
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.42014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
Nikolay Samokhvalov
 
NoSQL thumbtack experience, Анатолий Никулин
NoSQL thumbtack experience, Анатолий НикулинNoSQL thumbtack experience, Анатолий Никулин
NoSQL thumbtack experience, Анатолий Никулин
Anatoliy Nikulin
 
Алексей Емелин "Как разместить на карте тысячи интерактивных объектов"
Алексей Емелин "Как разместить на карте тысячи интерактивных объектов"Алексей Емелин "Как разместить на карте тысячи интерактивных объектов"
Алексей Емелин "Как разместить на карте тысячи интерактивных объектов"
Yandex
 
Алексей Емелин — Технология активных областей в API Яндекс.Карт
Алексей Емелин — Технология активных областей в API Яндекс.КартАлексей Емелин — Технология активных областей в API Яндекс.Карт
Алексей Емелин — Технология активных областей в API Яндекс.Карт
Yandex
 
2014.10.15 блиц-доклад PostgreSQL kNN search
2014.10.15 блиц-доклад PostgreSQL kNN search2014.10.15 блиц-доклад PostgreSQL kNN search
2014.10.15 блиц-доклад PostgreSQL kNN search
Nikolay Samokhvalov
 
ADD2010: Обработка большого объема данных на платформеApache Hadoop
ADD2010: Обработка большого объема данных на платформеApache Hadoop ADD2010: Обработка большого объема данных на платформеApache Hadoop
ADD2010: Обработка большого объема данных на платформеApache Hadoop Vladimir Klimontovich
 
Couchbase, что за зверь и на что способен.
Couchbase, что за зверь и на что способен.Couchbase, что за зверь и на что способен.
Couchbase, что за зверь и на что способен.Alexey Rusnak
 
мониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBAмониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBA
Slach
 
Распределенные системы хранения данных, особенности реализации DHT в проекте ...
Распределенные системы хранения данных, особенности реализации DHT в проекте ...Распределенные системы хранения данных, особенности реализации DHT в проекте ...
Распределенные системы хранения данных, особенности реализации DHT в проекте ...
yaevents
 

What's hot (18)

«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС «Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
 
Jinba - frontendconf.ru/2015
Jinba - frontendconf.ru/2015Jinba - frontendconf.ru/2015
Jinba - frontendconf.ru/2015
 
Developing high load systems using C++
Developing high load systems using C++Developing high load systems using C++
Developing high load systems using C++
 
"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro
"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro
"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro
 
Перевод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQLПеревод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQL
 
Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)
Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)
Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)
 
Pulsedb — система хранения временных рядов
Pulsedb — система хранения временных рядовPulsedb — система хранения временных рядов
Pulsedb — система хранения временных рядов
 
Andrey Borodin "Architecture of online backup for various DBMS"
Andrey Borodin "Architecture of online backup for various DBMS"Andrey Borodin "Architecture of online backup for various DBMS"
Andrey Borodin "Architecture of online backup for various DBMS"
 
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.42014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
 
NoSQL thumbtack experience, Анатолий Никулин
NoSQL thumbtack experience, Анатолий НикулинNoSQL thumbtack experience, Анатолий Никулин
NoSQL thumbtack experience, Анатолий Никулин
 
Алексей Емелин "Как разместить на карте тысячи интерактивных объектов"
Алексей Емелин "Как разместить на карте тысячи интерактивных объектов"Алексей Емелин "Как разместить на карте тысячи интерактивных объектов"
Алексей Емелин "Как разместить на карте тысячи интерактивных объектов"
 
Алексей Емелин — Технология активных областей в API Яндекс.Карт
Алексей Емелин — Технология активных областей в API Яндекс.КартАлексей Емелин — Технология активных областей в API Яндекс.Карт
Алексей Емелин — Технология активных областей в API Яндекс.Карт
 
Olap
OlapOlap
Olap
 
2014.10.15 блиц-доклад PostgreSQL kNN search
2014.10.15 блиц-доклад PostgreSQL kNN search2014.10.15 блиц-доклад PostgreSQL kNN search
2014.10.15 блиц-доклад PostgreSQL kNN search
 
ADD2010: Обработка большого объема данных на платформеApache Hadoop
ADD2010: Обработка большого объема данных на платформеApache Hadoop ADD2010: Обработка большого объема данных на платформеApache Hadoop
ADD2010: Обработка большого объема данных на платформеApache Hadoop
 
Couchbase, что за зверь и на что способен.
Couchbase, что за зверь и на что способен.Couchbase, что за зверь и на что способен.
Couchbase, что за зверь и на что способен.
 
мониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBAмониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBA
 
Распределенные системы хранения данных, особенности реализации DHT в проекте ...
Распределенные системы хранения данных, особенности реализации DHT в проекте ...Распределенные системы хранения данных, особенности реализации DHT в проекте ...
Распределенные системы хранения данных, особенности реализации DHT в проекте ...
 

Similar to «Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС

«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС
«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС
«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС
2ГИС Технологии
 
Российская СУБД Postgres Pro
Российская СУБД Postgres ProРоссийская СУБД Postgres Pro
Российская СУБД Postgres Pro
Andrey Fleyta
 
Виталий Гаврилов (Ленвендо)
Виталий Гаврилов (Ленвендо)Виталий Гаврилов (Ленвендо)
Виталий Гаврилов (Ленвендо)Ontico
 
Опыт использования NoSQL-хранилищ (Андрей Новиков)
Опыт использования NoSQL-хранилищ (Андрей Новиков)Опыт использования NoSQL-хранилищ (Андрей Новиков)
Опыт использования NoSQL-хранилищ (Андрей Новиков)Olga Lavrentieva
 
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...CodeFest
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012Roman Pavlushko
 
от авгиевых конюшен к звездам
от авгиевых конюшен к звездамот авгиевых конюшен к звездам
от авгиевых конюшен к звездам
Lev Goncharov
 
История небольшого успеха с PostgreSQL
История небольшого успеха с PostgreSQLИстория небольшого успеха с PostgreSQL
История небольшого успеха с PostgreSQL
dev1ant
 
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Ontico
 
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014
InterSystems
 
Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"
Fwdays
 
Владимир Бородин - PostgreSQL
Владимир Бородин - PostgreSQLВладимир Бородин - PostgreSQL
Владимир Бородин - PostgreSQLYandex
 
Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)
Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)
Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)
Ontico
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
dev1ant
 
олег царев Rit 2010 реляционные субд и их нереляционные реализации
олег царев Rit 2010   реляционные субд и их нереляционные реализацииолег царев Rit 2010   реляционные субд и их нереляционные реализации
олег царев Rit 2010 реляционные субд и их нереляционные реализацииrit2010
 
Rit 2010 реляционные олег царев субд и их нереляционные реализации
Rit 2010   реляционные олег царев субд и их нереляционные реализацииRit 2010   реляционные олег царев субд и их нереляционные реализации
Rit 2010 реляционные олег царев субд и их нереляционные реализацииrit2010
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Ontico
 
Введение в современную PostgreSQL. Часть 1
Введение в современную PostgreSQL. Часть 1Введение в современную PostgreSQL. Часть 1
Введение в современную PostgreSQL. Часть 1
Dzianis Pirshtuk
 
20131105 романенко
20131105 романенко20131105 романенко
20131105 романенко
Yandex
 
"Многомерные индексы в РСУБД с открытым кодом" Бородин Андрей , Октоника, УрФУ
"Многомерные индексы в РСУБД с открытым кодом" Бородин Андрей , Октоника, УрФУ"Многомерные индексы в РСУБД с открытым кодом" Бородин Андрей , Октоника, УрФУ
"Многомерные индексы в РСУБД с открытым кодом" Бородин Андрей , Октоника, УрФУ
it-people
 

Similar to «Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС (20)

«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС
«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС
«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС
 
Российская СУБД Postgres Pro
Российская СУБД Postgres ProРоссийская СУБД Postgres Pro
Российская СУБД Postgres Pro
 
Виталий Гаврилов (Ленвендо)
Виталий Гаврилов (Ленвендо)Виталий Гаврилов (Ленвендо)
Виталий Гаврилов (Ленвендо)
 
Опыт использования NoSQL-хранилищ (Андрей Новиков)
Опыт использования NoSQL-хранилищ (Андрей Новиков)Опыт использования NoSQL-хранилищ (Андрей Новиков)
Опыт использования NoSQL-хранилищ (Андрей Новиков)
 
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012
 
от авгиевых конюшен к звездам
от авгиевых конюшен к звездамот авгиевых конюшен к звездам
от авгиевых конюшен к звездам
 
История небольшого успеха с PostgreSQL
История небольшого успеха с PostgreSQLИстория небольшого успеха с PostgreSQL
История небольшого успеха с PostgreSQL
 
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
 
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014
 
Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"
 
Владимир Бородин - PostgreSQL
Владимир Бородин - PostgreSQLВладимир Бородин - PostgreSQL
Владимир Бородин - PostgreSQL
 
Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)
Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)
Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
олег царев Rit 2010 реляционные субд и их нереляционные реализации
олег царев Rit 2010   реляционные субд и их нереляционные реализацииолег царев Rit 2010   реляционные субд и их нереляционные реализации
олег царев Rit 2010 реляционные субд и их нереляционные реализации
 
Rit 2010 реляционные олег царев субд и их нереляционные реализации
Rit 2010   реляционные олег царев субд и их нереляционные реализацииRit 2010   реляционные олег царев субд и их нереляционные реализации
Rit 2010 реляционные олег царев субд и их нереляционные реализации
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
Введение в современную PostgreSQL. Часть 1
Введение в современную PostgreSQL. Часть 1Введение в современную PostgreSQL. Часть 1
Введение в современную PostgreSQL. Часть 1
 
20131105 романенко
20131105 романенко20131105 романенко
20131105 романенко
 
"Многомерные индексы в РСУБД с открытым кодом" Бородин Андрей , Октоника, УрФУ
"Многомерные индексы в РСУБД с открытым кодом" Бородин Андрей , Октоника, УрФУ"Многомерные индексы в РСУБД с открытым кодом" Бородин Андрей , Октоника, УрФУ
"Многомерные индексы в РСУБД с открытым кодом" Бородин Андрей , Октоника, УрФУ
 

«Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС