Поиск по сайту:

Что такое графическая база данных и для чего она используется?


Графовые базы данных — это особый вид баз данных, в которых хранятся сложные структуры данных, которые невозможно хранить в традиционной реляционной базе данных. В первую очередь они используются для социальных сетей, поскольку они гораздо более эффективны для определенных запросов.

Что такое графическая база данных?

Базы данных графов чаще всего используются для сильно взаимосвязанных данных и в ситуациях, когда содержание самих данных имеет меньшее значение, чем общая структура.

Самый простой вариант использования графических данных — для социальных сетей. Рассмотрим сеть людей; у каждого человека есть список друзей и отношения с другими людьми. Каждый человек также делает посты, часто их сотни. С каждым постом могут взаимодействовать тысячи людей. Таким образом, несмотря на то, что твит состоит всего из 280 символов, о нем можно хранить гораздо больше.

Это, конечно, не единственный вариант использования, просто наиболее удобный — графовые базы данных используются для самых разных целей. Другой пример — обнаружение мошенничества; скажем, вы банк и хотите отметить подозрительные счета. Может быть немного подозрительно, если две отдельные учетные записи имеют один и тот же адрес или общие номера телефонов. С помощью графовой базы данных вы можете построить граф связи между двумя учетными записями и выявлять подобные проблемы намного эффективнее, чем когда-либо могла реляционная база данных.

В графовой базе данных каждый объект называется узлом. У узла может быть любое количество свойств, что очень похоже на то, как работает база данных документов. База данных документов будет просто хранить каждый узел как отдельный документ в коллекции (массиве) документов, не принимая во внимание, как они соединяются.

В базе данных графа соединения между узлами называются ребрами, и они могут соединять любые два узла из любой точки таблицы. Ребра определяют отношения между узлами и могут иметь определенные типы. Например, два друга будут связаны с краем «Друзья», а пользователь будет связан с публикацией с краем «Опубликовано» или «Понравилось».

Что делает их быстрее?

Дело не в том, что реляционные базы данных, такие как MySQL, не могут хранить графоподобные структуры — подобные ссылки по-прежнему являются основными концепциями для таблиц SQL. Ссылки образуют связи между таблицами, позволяя хранить и обновлять данные в отдельных таблицах, сохраняя при этом связь в другом месте базы данных, что очень похоже на то, как работают указатели в C.  В примере с социальной сетью вам не нужно хранить имя каждый друг данного пользователя в качестве этого друга может изменить свое имя, поэтому вместо этого вы сохраняете идентификатор друга, а затем выполняете поиск всякий раз, когда вам нужны правильные данные. Возможно, вы кэшируете результаты, чтобы немного нагрузить базу данных, но большинство систем будут работать аналогичным образом.

Хранение одного набора ссылок (например, списка друзей) — это хорошо, но проблема возникает, когда вы начинаете выполнять какой-либо сложный анализ. Классический пример — поиск друзей друзей. Чтобы получить список всех, у кого есть общий друг с данным человеком, вам нужно будет перебрать список друзей данного человека, а затем перебрать список друзей каждого друга, а затем выполнить поиск для каждой записи. Вы также должны убедиться, что не возвращаете повторяющиеся записи, что является дополнительным циклом.

Если вы знакомы с нотацией Big O, вы уже можете увидеть здесь проблему. Это задача с экспоненциальной сложностью; выполнение нескольких вложенных циклов, подобных этому, очень быстро ломает компьютер. Это также не умный способ решить эту проблему.

Взгляните на этот тест neo4j, выполняющий запрос друзей друзей, по сравнению с традиционной реляционной базой данных (такой как MySQL):

На глубине 2 это простой запрос для обеих баз данных. На глубине 3 MySQL становится неспособным выполнить этот запрос в обычном временном интервале, и для возврата ответа требуется 30 секунд. К его чести, ему удается вернуть запрос глубины 4 через 25 минут, хотя глубина 5 приводит к сбою базы данных.

База данных графа без проблем возвращает любой из этих запросов, все время выполнения составляет менее 2 секунд, что делает его в тысячи раз быстрее.

Как оно работает? Очень сложная математика, в основном. Графики по своей сути являются математической структурой, и за ними стоит множество теорий, которые мы совершенно не имеем права обсуждать в деталях. Но реляционные графы довольно просты для визуального понимания, что упрощает работу с базами данных графов на практике.

Если вы хотите начать работать с ним, вам придется выбрать и установить графовую базу данных. Neo4j является бесплатным и открытым исходным кодом и очень популярным вариантом. У AWS есть своя база данных Neptune, которую вы можете попробовать бесплатно, но она должна размещаться на AWS. Некоторые базы данных с несколькими моделями поддерживают графы в качестве опции, например Microsoft SQL Server, Oracle Database и ArangoDB.