Справочная информация: Ниже приводится книга « Базы данных графиков» , в которой описывается тест производительности, упомянутый в книге « Neo4j в действии» :
Отношения в графе естественно образуют пути. Запрос или обход графика включает в себя следующие пути. Из-за принципиально ориентированной на путь природы модели данных большинство операций с базой данных на основе путей графа тесно связаны с тем, как располагаются данные, что делает их чрезвычайно эффективными. В своей книге Neo4j в действии Partner и Vukotic проводят эксперимент с использованием реляционного магазина и Neo4j.
Сравнение показывает, что графическая база данных значительно быстрее для связанных данных, чем реляционный магазин. Эксперимент Партнера и Вукотика направлен на поиск друзей в социальной сети, максимально на пять глубин. Имеются ли произвольно выбранные два человека, существует ли какой-то путь, который связывает их не более чем в пять отношений? Для социальной сети, содержащей 1 000 000 человек, каждый из которых имеет приблизительно 50 друзей, результаты убедительно показывают, что графические базы данных являются лучшим выбором для связанных данных, как мы видим в Таблице 2-1.
Таблица 2-1. Поиск расширенных друзей в реляционной базе данных по сравнению с эффективным поиском в Neo4j
Depth RDBMS Execution time (s) Neo4j Execution time (s) Records returned 2 0.016 0.01 ~2500 3 30.267 0.168 ~110,000 4 1543.505 1.359 ~600,000 5 Unfinished 2.132 ~800,000
На втором уровне (друзья друзей) и реляционная база данных, и база данных графов работают достаточно хорошо, чтобы мы могли рассмотреть их использование в онлайн-системе. Хотя запрос Neo4j выполняется в две трети времени от реляционного запроса, конечный пользователь едва заметит разницу в миллисекундах между ними. Однако к моменту, когда мы достигнем третьей глубины («друг друга друга»), становится ясно, что реляционная база данных больше не может обрабатывать запрос в разумные сроки: тридцать секунд, которые требуются для выполнения, будут совершенно неприемлемы для онлайн-системы. Напротив, время отклика Neo4j остается относительно плоским: всего лишь доли секунды для выполнения запроса - определенно достаточно быстро для онлайн-системы.
На четвертой глубине реляционная база данных демонстрирует сокрушительную задержку, что делает ее практически бесполезной для онлайн-системы. Время Neo4j тоже немного ухудшилось, но задержка здесь на периферии приемлемости для отзывчивой онлайн-системы. Наконец, на пятой глубине реляционная база данных просто занимает слишком много времени для выполнения запроса. Neo4j, напротив, возвращает результат примерно через две секунды. На пятой глубине выясняется, что почти вся сеть - наш друг: для многих реальных случаев использования мы, вероятно, сократили бы результаты и сроки.
Вопросы:
- Это разумный тест для подражания тому, что можно найти, кроме как найти в социальной сети? (Имеется в виду, например, что в реальных социальных сетях обычно есть узлы с примерно 50 друзьями; кажется, что модель " богатые становятся богаче " была бы более естественной для социальных сетей, хотя и может быть ошибочной.)
- Независимо от естественности эмуляции, есть ли основания полагать, что результаты отрицательны или не воспроизводимы?