Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Как мы храним 
большой социальный 
граф 
Бартенев Максим 
Норси-Транс
План доклада 
• Что мы решали с помощью графовых 
БД 
• Графовые БД Neo4J и Sparksee 
• Настройка и оптимизация Neo4J и 
S...
Графы везде 
Применяются во многих сферах: 
• веб-ссылки; 
• маршруты; 
• социальные сети; 
• и т.д. 
Имеют очень большой ...
Графовое хранилище
Решаемые задачи 
• Загрузка графа 
• Выполнение аналитической операции 
• Догрузка новых данных, в случае их 
появления
Аналитические задачи 
• Получить всех соседей вершины (Neighbors) 
• Выполнить обход графа (BFS) 
• Найти кратчайший путь ...
Neo4J 
• Наиболее распространенная 
• Развитое сообщество 
• Высокая функциональность 
• Может быть как серверным 
приложе...
Особенности Neo4J 
• Все операции только внутри 
транзакции – правильно и надежно, 
но медленно и ест много 
оперативной п...
BatchInserter 
• Быстрый импорт 
• НЕ отказоустойчивый 
• НЕ потокобезопасный
Индексирование 
• Новый метод schema.indexFor() – 
только по атрибутам на вершинах 
• Устаревший метод graphDb.index() – и...
Memory mapped cache 
• Служит для ускорения I/O 
• Проецирует файлы хранилища в 
память 
• Каждому файлу свой кэш
Размеры объектов на диске 
Вершина 15 B 
Ребро 34 B 
Атрибут 41 B 
Строка 128 B 
Массив 128 B 
Cache size = размер объекта...
Настройки memory mapped 
cache 
• use_memory_mapped_buffers 
• mapped_memory 
– nodestore.db.mapped_memory 
– relationship...
Object cache 
• Хранит в себе объекты для быстрого 
доступа при обходах графа 
• Вытеснение объектов осуществляет 
GC 
• Р...
Типы Object cache 
none кэш отсутствует 
soft стандартное значение в бесплатной версии 
weak больше данных при меньшем вре...
Sparksee (в прошлом DEX) 
• Заявлена высокая 
производительность 
• Только встраиваемая 
• Не столь распространенная 
• Со...
Особенности Sparksee 
• Обязательно задается схема данных 
• Доступ к объекту только по 
внутреннему идентификатору
Настройки Sparksee 
• Настройки ребер: 
– Ориентированные 
– Индексированные 
• Типы атрибутов: 
– Обычный 
– Индексирован...
Sparksee cache 
• Настройки кэширования минимальны 
• Все новые объекты попадают в кэш 
• SetCacheMaxSize(int megabytes) 
...
Тестовый стенд 
• Intel Xeon E7540 2.0 GHz 
• 64GB DDR3 
• 2x2TB hard drive
ПО и настройки Neo4J 
• Neo4J 2.1.5 Community Edition 
• Ubuntu 14.04 LTS 
• JVM: -d64 –Xmx40G -XX:+UseParallelGC 
• Batch...
ПО и настройки Sparksee 
• Sparksee 5.1.0 Unlimited licence 
• Windows Server 2008 x64 
• .NET API 
• Cache size 60GB
Время импорта данных (ч) 
0.50 
14.10 
1.30 
6.40 
30.00 
25.00 
20.00 
15.00 
10.00 
5.00 
0.00 
100 млн 500 млн 1 млрд 
...
Время обработки графа (с) 
210 
51 
0,8 
130 
33 
2 
250 
200 
150 
100 
50 
0 
BFS Shortest path Neighbors 
Neo4J 
Sparks...
Время обработки графа (с) 
3650 
570 
12 
720 
240 
3 
4000 
3500 
3000 
2500 
2000 
1500 
1000 
500 
0 
BFS Shortest path...
Выводы 
• Sparksee производительнее Neo4J 
• Высокая производительность 
графовых БД ограничивается 
размером памяти 
• Гр...
Спасибо 
за 
внимание!
Upcoming SlideShare
Loading in …5
×

Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)

1,970 views

Published on

Доклад Максима Бартенева на HighLoad++ 2014.

Published in: Internet
  • Be the first to comment

Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)

  1. 1. Как мы храним большой социальный граф Бартенев Максим Норси-Транс
  2. 2. План доклада • Что мы решали с помощью графовых БД • Графовые БД Neo4J и Sparksee • Настройка и оптимизация Neo4J и Sparksee • Каких результатов удалось достичь
  3. 3. Графы везде Применяются во многих сферах: • веб-ссылки; • маршруты; • социальные сети; • и т.д. Имеют очень большой объем. Сложность в анализе графа, а не в хранении.
  4. 4. Графовое хранилище
  5. 5. Решаемые задачи • Загрузка графа • Выполнение аналитической операции • Догрузка новых данных, в случае их появления
  6. 6. Аналитические задачи • Получить всех соседей вершины (Neighbors) • Выполнить обход графа (BFS) • Найти кратчайший путь (Shortest path)
  7. 7. Neo4J • Наиболее распространенная • Развитое сообщество • Высокая функциональность • Может быть как серверным приложением, так и встраиваемым • Есть бесплатная версия
  8. 8. Особенности Neo4J • Все операции только внутри транзакции – правильно и надежно, но медленно и ест много оперативной памяти. • Объекты – вершины, ребра и атрибуты. Доступ к ним только по внутреннему идентификатору.
  9. 9. BatchInserter • Быстрый импорт • НЕ отказоустойчивый • НЕ потокобезопасный
  10. 10. Индексирование • Новый метод schema.indexFor() – только по атрибутам на вершинах • Устаревший метод graphDb.index() – и по вершинам и по ребрам • Индексация в режиме Batch inserter BatchInserterIndexProvider.nodeIndex()
  11. 11. Memory mapped cache • Служит для ускорения I/O • Проецирует файлы хранилища в память • Каждому файлу свой кэш
  12. 12. Размеры объектов на диске Вершина 15 B Ребро 34 B Атрибут 41 B Строка 128 B Массив 128 B Cache size = размер объекта * количество объектов
  13. 13. Настройки memory mapped cache • use_memory_mapped_buffers • mapped_memory – nodestore.db.mapped_memory – relationshipstore.db.mapped_memory – propertystore.db.mapped_memory – и т.д.
  14. 14. Object cache • Хранит в себе объекты для быстрого доступа при обходах графа • Вытеснение объектов осуществляет GC • Реально производительный кэш есть только в Enterprice версии
  15. 15. Типы Object cache none кэш отсутствует soft стандартное значение в бесплатной версии weak больше данных при меньшем времени их жизни strong хранит в себе все объекты графа hpc специальный высокопроизводительный кэш
  16. 16. Sparksee (в прошлом DEX) • Заявлена высокая производительность • Только встраиваемая • Не столь распространенная • Сообщество очень маленькое • Полностью закрытая • Бесплатна для исследований
  17. 17. Особенности Sparksee • Обязательно задается схема данных • Доступ к объекту только по внутреннему идентификатору
  18. 18. Настройки Sparksee • Настройки ребер: – Ориентированные – Индексированные • Типы атрибутов: – Обычный – Индексированный – Уникальный
  19. 19. Sparksee cache • Настройки кэширования минимальны • Все новые объекты попадают в кэш • SetCacheMaxSize(int megabytes) – Если megabytes == 0, то используется вся свободная память минус 512mb.
  20. 20. Тестовый стенд • Intel Xeon E7540 2.0 GHz • 64GB DDR3 • 2x2TB hard drive
  21. 21. ПО и настройки Neo4J • Neo4J 2.1.5 Community Edition • Ubuntu 14.04 LTS • JVM: -d64 –Xmx40G -XX:+UseParallelGC • Batch insertion mode • Use_memory_mapped_buffers • Cache vertices 2GB, relationships 18GB
  22. 22. ПО и настройки Sparksee • Sparksee 5.1.0 Unlimited licence • Windows Server 2008 x64 • .NET API • Cache size 60GB
  23. 23. Время импорта данных (ч) 0.50 14.10 1.30 6.40 30.00 25.00 20.00 15.00 10.00 5.00 0.00 100 млн 500 млн 1 млрд Neo4J Sparksee Больше суток. Слишком долго!
  24. 24. Время обработки графа (с) 210 51 0,8 130 33 2 250 200 150 100 50 0 BFS Shortest path Neighbors Neo4J Sparksee ~10 миллионов вершин и ~100 миллионов ребер
  25. 25. Время обработки графа (с) 3650 570 12 720 240 3 4000 3500 3000 2500 2000 1500 1000 500 0 BFS Shortest path Neighbors Neo4J Sparksee ~50 миллионов вершин и ~500 миллионов ребер
  26. 26. Выводы • Sparksee производительнее Neo4J • Высокая производительность графовых БД ограничивается размером памяти • Графы размером больше 1 млрд вершин не получится обработать
  27. 27. Спасибо за внимание!

×