Upload
2-
View
1.122
Download
6
Embed Size (px)
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