33
Дорожная сеть в графовой базе данных Neo4j Вадим Шашенко 2gis.ru @rnd2gis

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

  • Upload
    2-

  • View
    1.122

  • Download
    6

Embed Size (px)

DESCRIPTION

В своем докладе я расскажу, почему мы выбрали графовую базу данных Neo4j для проверки дорожного графа городов России (все населенные пункты с населением больше 300 000 жителей). Основные задачи, которые мы решаем средствами Neo4j — это проверки на связность и доступность проезда. Опорные пункты доклада: — SQL против графовых баз данных; — обзор графовой базы данных neo4j; — архитектура решения, в котором используется графовая БД; — выполнение алгоритмов на графе в условиях его частых изменений. В основе доклада лежат результаты работы над проектом «Fiji». Это внутрикорпоративная система, которая позволяет штатным картографам 2ГИС создавать, хранить и экспортировать карту во внешние продукты: онлайн-, десктоп- и мобильную версии 2ГИС.

Citation preview

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

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

2gis.ru @rnd2gis

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

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

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

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

3

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

Карта4

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

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

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

Проверка графа на связность• Существование маршрута между двумя любыми вершинами

• Алгоритм требует обхода всех вершин и всех ребер

• Параметризация проверки (тип транспорта, время)

6

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

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

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

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

8

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

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

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

Побольше10

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

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

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

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

• 85 городов России (все с нас. более 300 тыс.)

• 3 города Казахстана

• 2 города Украины

• 1 город Италии и Кипра

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

12

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

Характеристики графа• 2.3 млн вершин

• 5.5 млн ребер

• 9 млн атрибутов

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

13

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

Проблема

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

• Без параметров – 30 минут

• С параметрами – 4-6 часов

14

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

Проблема

Данных много

Хочется:

• Меньше ожидание пользователя

• Больше rps

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

15

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

Задача

• Геометрия дорожной сети в реляционной БД

• Проверка на связность

• Делать это быстро

• Частые запуски проверок

• Часто меняющийся граф

16

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

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

VS

17

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

Решения на RDBMS• Закачать весь граф в память (pgRouting)

• Быстрый обход графа

• Ограничены памятью

• Геометрия в БД меняется

18

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

Решения на RDBMS• Закачать весь граф в память (pgRouting)

• Быстрый обход графа

• Ограничены памятью

• Геометрия в БД меняется

• Работать в таблице ребер (рекурсивный поиск ребра в таблице)

• Не ограничены памятью

• Очень медленный обход графа

19

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

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

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

Решения на RDBMS• Закачать весь граф в память (pgRouting)

• Быстрый обход графа

• Ограничены памятью

• Геометрия в БД меняется

• Работать в таблице ребер (рекурсивный поиск ребра в таблице)

• Очень медленный обход графа

• Не ограничены памятью

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

21

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

Решения на NoSQL – графовая базаданных Neo4j

• Загрузили все наши данные

• Потестировали алгоритмы обхода графа

22

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

Решения на NoSQL – графовая базаданных Neo4j

• Загрузили все наши данные

• Потестировали алгоритмы обхода графа

• Обход графа поиском в глубину – 1 мин

• Проверка связности графа на Москве – 15 секунд

• Проверка связности всего графа – 10 мин

• Не зависит от количества данных в хранилище

23

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

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

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

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

VS

25

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

Обзор Neo4j• Естественная работа с математическим графом

• Вершины, ребра, атрибуты

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

• Индексы на значения атрибутов

• ACID

• REST API. Веб-админка

• Расширения-плагины

• Open source. Java.

26

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

Почему именно Neo4j• Самая популярная из графовых баз данных

• Богатый функционал

• Активная разработка

• Живое сообщество

• Готовые сторонние расширения: пространственный индекс, разные

алгоритмы на графе, импортер из csv.

• Коннекторы из множества языков программирования

27

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

Недостатки Neo4j• Нет горизонтального масштабирования

• Удаление из бд не освобождает место на диске (требуется рестарт)

28

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

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

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

Возможные оптимизации• Разбиение на подграфы

• Иерархичность

30

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

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

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

31

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

Итог

Есть много данных, которые можно представить графом?

Нужна быстрая работа графовых алгоритмов?

Стоит попробовать Neo4j.

32

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

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

[email protected]

33