«Дорожная сеть в графовой базе данных Neo4j» — Вадим...

Preview:

DESCRIPTION

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

Citation preview

Дорожная сеть в графовой базеданных 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

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

VS

17

Решения на 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

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

v.shashenko@2gis.ru

33