27
Как мы храним большой социальный граф Бартенев Максим Норси-Транс

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

  • Upload
    ontico

  • View
    639

  • Download
    7

Embed Size (px)

DESCRIPTION

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

Citation preview

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

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

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

План доклада

• Что мы решали с помощью графовых БД

• Графовые БД Neo4J и Sparksee• Настройка и оптимизация Neo4J и

Sparksee• Каких результатов удалось достичь

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

Графы везде

Применяются во многих сферах: • веб-ссылки; • маршруты;• социальные сети;• и т.д.Имеют очень большой объем.Сложность в анализе графа, а не в хранении.

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

Графовое хранилище

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

Решаемые задачи

• Загрузка графа • Выполнение аналитической операции• Догрузка новых данных, в случае их

появления

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

Аналитические задачи• Получить всех соседей вершины

(Neighbors)• Выполнить обход графа (BFS)• Найти кратчайший путь (Shortest path)

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

Neo4J• Наиболее распространенная• Развитое сообщество• Высокая функциональность• Может быть как серверным

приложением, так и встраиваемым

• Есть бесплатная версия

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

Особенности Neo4J• Все операции только внутри

транзакции – правильно и надежно, но медленно и ест много оперативной памяти.

• Объекты – вершины, ребра и атрибуты. Доступ к ним только по внутреннему идентификатору.

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

BatchInserter• Быстрый импорт• НЕ отказоустойчивый• НЕ потокобезопасный

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

Индексирование• Новый метод schema.indexFor() –

только по атрибутам на вершинах• Устаревший метод graphDb.index() –

и по вершинам и по ребрам• Индексация в режиме Batch inserter

BatchInserterIndexProvider.nodeIndex()

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

Memory mapped cache• Служит для ускорения I/O• Проецирует файлы хранилища в

память• Каждому файлу свой кэш

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

Размеры объектов на дискеВершина 15 BРебро 34 BАтрибут 41 B

Строка 128 BМассив 128 B

Cache size = размер объекта * количество объектов

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

Настройки memory mapped cache• use_memory_mapped_buffers• mapped_memory

– nodestore.db.mapped_memory– relationshipstore.db.mapped_memo

ry– propertystore.db.mapped_memory– и т.д.

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

Object cache• Хранит в себе объекты для

быстрого доступа при обходах графа

• Вытеснение объектов осуществляет GC

• Реально производительный кэш есть только в Enterprice версии

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

Типы Object cachenone кэш отсутствуетsoft стандартное значение в бесплатной версии

weak больше данных при меньшем времени их жизни

strong хранит в себе все объекты графаhpc специальный высокопроизводительный кэш

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

Sparksee (в прошлом DEX)• Заявлена высокая

производительность• Только встраиваемая• Не столь распространенная• Сообщество очень маленькое• Полностью закрытая• Бесплатна для исследований

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

Особенности Sparksee• Обязательно задается схема

данных• Доступ к объекту только по

внутреннему идентификатору

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

Настройки Sparksee• Настройки ребер:

– Ориентированные– Индексированные

• Типы атрибутов:– Обычный– Индексированный– Уникальный

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

Sparksee cache• Настройки кэширования

минимальны• Все новые объекты попадают в

кэш• SetCacheMaxSize(int megabytes)

– Если megabytes == 0, то используется вся свободная память минус 512mb.

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

Тестовый стенд• Intel Xeon E7540 2.0 GHz• 64GB DDR3• 2x2TB hard drive

Page 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

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

ПО и настройки Sparksee• Sparksee 5.1.0 Unlimited licence• Windows Server 2008 x64• .NET API• Cache size 60GB

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

Время импорта данных (ч)

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: Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-транс)

Время обработки графа (с)

BFS Shortest path Neighbors0

50

100

150

200

250210

51

0,8

130

33

2

Neo4JSparksee

~10 миллионов вершин и ~100 миллионов ребер

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

Время обработки графа (с)

BFS Shortest path Neighbors0

5001000150020002500300035004000 3650

570

12

720240

3

Neo4JSparksee

~50 миллионов вершин и ~500 миллионов ребер

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

Выводы• Sparksee производительнее Neo4J• Высокая производительность

графовых БД ограничивается размером памяти

• Графы размером больше 1 млрд вершин не получится обработать

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

Спасибо за

внимание!