Как мы храним и анализируем большой социальный граф,...
DESCRIPTION
Доклад Максима Бартенева на HighLoad++ 2014.TRANSCRIPT
![Page 1: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/1.jpg)
Как мы храним большой социальный графБартенев МаксимНорси-Транс
![Page 2: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/2.jpg)
План доклада
• Что мы решали с помощью графовых БД
• Графовые БД Neo4J и Sparksee• Настройка и оптимизация Neo4J и
Sparksee• Каких результатов удалось достичь
![Page 3: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/3.jpg)
Графы везде
Применяются во многих сферах: • веб-ссылки; • маршруты;• социальные сети;• и т.д.Имеют очень большой объем.Сложность в анализе графа, а не в хранении.
![Page 4: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/4.jpg)
Графовое хранилище
![Page 5: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/5.jpg)
Решаемые задачи
• Загрузка графа • Выполнение аналитической операции• Догрузка новых данных, в случае их
появления
![Page 6: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/6.jpg)
Аналитические задачи• Получить всех соседей вершины
(Neighbors)• Выполнить обход графа (BFS)• Найти кратчайший путь (Shortest path)
![Page 7: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/7.jpg)
Neo4J• Наиболее распространенная• Развитое сообщество• Высокая функциональность• Может быть как серверным
приложением, так и встраиваемым
• Есть бесплатная версия
![Page 8: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/8.jpg)
Особенности Neo4J• Все операции только внутри
транзакции – правильно и надежно, но медленно и ест много оперативной памяти.
• Объекты – вершины, ребра и атрибуты. Доступ к ним только по внутреннему идентификатору.
![Page 9: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/9.jpg)
BatchInserter• Быстрый импорт• НЕ отказоустойчивый• НЕ потокобезопасный
![Page 10: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/10.jpg)
Индексирование• Новый метод schema.indexFor() –
только по атрибутам на вершинах• Устаревший метод graphDb.index() –
и по вершинам и по ребрам• Индексация в режиме Batch inserter
BatchInserterIndexProvider.nodeIndex()
![Page 11: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/11.jpg)
Memory mapped cache• Служит для ускорения I/O• Проецирует файлы хранилища в
память• Каждому файлу свой кэш
![Page 12: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/12.jpg)
Размеры объектов на дискеВершина 15 BРебро 34 BАтрибут 41 B
Строка 128 BМассив 128 B
Cache size = размер объекта * количество объектов
![Page 13: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/13.jpg)
Настройки memory mapped cache• use_memory_mapped_buffers• mapped_memory
– nodestore.db.mapped_memory– relationshipstore.db.mapped_memo
ry– propertystore.db.mapped_memory– и т.д.
![Page 14: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/14.jpg)
Object cache• Хранит в себе объекты для
быстрого доступа при обходах графа
• Вытеснение объектов осуществляет GC
• Реально производительный кэш есть только в Enterprice версии
![Page 15: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/15.jpg)
Типы Object cachenone кэш отсутствуетsoft стандартное значение в бесплатной версии
weak больше данных при меньшем времени их жизни
strong хранит в себе все объекты графаhpc специальный высокопроизводительный кэш
![Page 16: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/16.jpg)
Sparksee (в прошлом DEX)• Заявлена высокая
производительность• Только встраиваемая• Не столь распространенная• Сообщество очень маленькое• Полностью закрытая• Бесплатна для исследований
![Page 17: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/17.jpg)
Особенности Sparksee• Обязательно задается схема
данных• Доступ к объекту только по
внутреннему идентификатору
![Page 18: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/18.jpg)
Настройки Sparksee• Настройки ребер:
– Ориентированные– Индексированные
• Типы атрибутов:– Обычный– Индексированный– Уникальный
![Page 19: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/19.jpg)
Sparksee cache• Настройки кэширования
минимальны• Все новые объекты попадают в
кэш• SetCacheMaxSize(int megabytes)
– Если megabytes == 0, то используется вся свободная память минус 512mb.
![Page 20: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/20.jpg)
Тестовый стенд• Intel Xeon E7540 2.0 GHz• 64GB DDR3• 2x2TB hard drive
![Page 21: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/21.jpg)
ПО и настройки 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
![Page 22: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/22.jpg)
ПО и настройки Sparksee• Sparksee 5.1.0 Unlimited licence• Windows Server 2008 x64• .NET API• Cache size 60GB
![Page 23: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/23.jpg)
Время импорта данных (ч)
100 млн 500 млн 1 млрд0.00
5.00
10.00
15.00
20.00
25.00
30.00
0.50
14.10
1.30
6.40
Neo4JSparksee
Больше суток.Слишком долго!
![Page 24: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/24.jpg)
Время обработки графа (с)
BFS Shortest path Neighbors0
50
100
150
200
250210
51
0,8
130
33
2
Neo4JSparksee
~10 миллионов вершин и ~100 миллионов ребер
![Page 25: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/25.jpg)
Время обработки графа (с)
BFS Shortest path Neighbors0
5001000150020002500300035004000 3650
570
12
720240
3
Neo4JSparksee
~50 миллионов вершин и ~500 миллионов ребер
![Page 26: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/26.jpg)
Выводы• Sparksee производительнее Neo4J• Высокая производительность
графовых БД ограничивается размером памяти
• Графы размером больше 1 млрд вершин не получится обработать
![Page 27: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)](https://reader033.vdocuments.site/reader033/viewer/2022052507/557ef1c0d8b42a34628b50b3/html5/thumbnails/27.jpg)
Спасибо за
внимание!