Вадим Шашенко, 2ГИС

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

Upload: ontico

Post on 22-Jun-2015

1.152 views

Category:

Documents


0 download

DESCRIPTION

HighLoad++ 2013

TRANSCRIPT

Page 1: Вадим Шашенко, 2ГИС

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

2gis.ru @rnd2gis

Page 2: Вадим Шашенко, 2ГИС

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

Page 3: Вадим Шашенко, 2ГИС

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

3

Page 4: Вадим Шашенко, 2ГИС

Карта4

Page 5: Вадим Шашенко, 2ГИС

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

Page 6: Вадим Шашенко, 2ГИС

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

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

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

6

Page 7: Вадим Шашенко, 2ГИС

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

Page 8: Вадим Шашенко, 2ГИС

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

8

Page 9: Вадим Шашенко, 2ГИС

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

Page 10: Вадим Шашенко, 2ГИС

Побольше10

Page 11: Вадим Шашенко, 2ГИС

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

Page 12: Вадим Шашенко, 2ГИС

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

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

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

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

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

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

12

Page 13: Вадим Шашенко, 2ГИС

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

• 5.5 млн ребер

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

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

13

Page 14: Вадим Шашенко, 2ГИС

Проблема

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

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

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

14

Page 15: Вадим Шашенко, 2ГИС

Проблема

Данных много

Хочется:

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

• Больше rps

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

15

Page 16: Вадим Шашенко, 2ГИС

Задача

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

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

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

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

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

16

Page 17: Вадим Шашенко, 2ГИС

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

VS

17

Page 18: Вадим Шашенко, 2ГИС

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

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

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

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

18

Page 19: Вадим Шашенко, 2ГИС

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

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

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

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

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

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

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

19

Page 20: Вадим Шашенко, 2ГИС

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

Page 21: Вадим Шашенко, 2ГИС

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

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

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

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

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

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

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

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

21

Page 22: Вадим Шашенко, 2ГИС

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

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

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

22

Page 23: Вадим Шашенко, 2ГИС

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

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

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

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

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

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

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

23

Page 24: Вадим Шашенко, 2ГИС

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

Page 25: Вадим Шашенко, 2ГИС

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

VS

25

Page 26: Вадим Шашенко, 2ГИС

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

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

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

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

• ACID

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

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

• Open source. Java.

26

Page 27: Вадим Шашенко, 2ГИС

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

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

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

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

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

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

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

27

Page 28: Вадим Шашенко, 2ГИС

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

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

28

Page 29: Вадим Шашенко, 2ГИС

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

Page 30: Вадим Шашенко, 2ГИС

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

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

30

Page 31: Вадим Шашенко, 2ГИС

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

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

31

Page 32: Вадим Шашенко, 2ГИС

Итог

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

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

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

32

Page 33: Вадим Шашенко, 2ГИС

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

[email protected]

33