4. базы данных nosql
Скачать 1.03 Mb.
|
Рис. 4.14. Пример графовой БД Графовые базы данных специально предназначены для хранения такой ин- формации, но в более крупном масштабе, чем можно показать на диаrрамме. Они идеально подходят для хранения любых данных, связанных со сложными отно- шениями, например, социальных сетей, товарных предпочтений или правил при- ема на работу. Фундаментальная модель данных графовых баз очень простая: узлы – это сущности, соединенные ребрами (связями). Узлы имеют свойства. Ребра могут иметь свойства и направление. Организация графа позволяет один раз записать данные, а затем интерпре- тировать их разными способами в соответствии со связями. Как только построен граф узлов и ребер, база данных позволит послать к ней запрос. В этом проявляется важное различие между графовыми и реляционными базами данных. Несмотря на то что реляционные базы данных могут реализовывать связи с помощью внешних ключей, операции соединения требуют навигации, которая может оказаться затратной. Следовательно, в моделях данных с большим коли- чеством связей производительность упадет. В графических базах данных обход узлов требует очень небольших затрат. В основном это объясняется тем, что графовые базы данных переносят большую часть работы, связанной с навигацией по связям с момента запроса на момент вставки. Это естественно оправдывает себя в ситуациях, когда производитель- ность запроса важнее скорости вставки. Большую часть времени вы ищете дан- ные, перемещаясь по ребрам сети с запросами вроде таких: «найти людей с именем Анна»; «найти книгу в категории «Базы данных» «найти автора(ов) книги «Управление данными»»; «найти, чем интересуется Иван» и т.д. Однако для организации поиска необходима отправная точка, поэтому неко- торые узлы могут быть индексированы атрибутом, например, идентификатором. Таким образом, можно начать с поиска идентификатора (например, найти людей с именами Анна и Барбара), а затем начать перемещение по ребрам. Как следует из рассмотренных свойств, графовые базы предназначены для задач, в которых большую часть времени выполняется поиск – происходит пере- мещение по связям. Акцент на связях сильно отличает графовые базы данных от агрегатно- ори- ентированных. Это отличие проявляется в том, что, во-первых, графовые базы данных чаще работают на одном сервере, а не распределены по кластерам, а во- вторых, в графовых БД реализован механизм транзакций, обеспечивающий со- гласованность данных. Единственное, что связывает их с агрегатно-ориентированными базами дан- ных – это отрицание реляционной модели. Отношения (связи) между узлами создаются в двух направлениях. Рассмот- рим графовую БД, изображенную на рис. 4.15. Например, узел Анна работает в OAO «Аналитика», а узел Екатерина нет. Иван Анна OAO «Аналитика» Максим Работает веб-программистом с февраля 2019 г. Друг с 2015 г. Коллега с 2019 г. Работает Java- программистом с января 2019 г. Работает разработчиком приложений с марта 2019 г. Рис. 4.14. Графовая БД Направленность отношения позволяет проектировать сложные предметно- ориентированные модели. Известные входящие и исходящие отношения можно обходить в обоих направлениях. Отношения являются полноправными элементами графовых баз данных. Собственно, ценность графовых баз данных в основном обусловлена отношени- ями. Отношения имеют не только тип, начальный и конечный узел, но и свои собственные свойства. Используя эти свойства, в отношение можно внести ин- формацию, например, такую: когда узлы стали «друзьями», каково расстояние между узлами и что между ними общего. Эти свойства отношений можно исполь- зовать при создании запроса к графу. Так как мощь графовых баз данных в основном обеспечивается отношени- ями и их свойствами, требуется серьезная аналитическая и конструкторская ра- бота по моделированию отношений между объектами предметной области. До- бавление новых типов узлов в графовую БД выполняется просто. Изменение су- ществующих узлов и связей между ними эквивалентно осуществлению миграции данных, потому что эти изменения необходимо вносить в каждом узле и в каждом отношении между существующими данными. Графовые БД поддерживают транзакции. Прежде чем изменить какой-ни- будь узел или добавить какое-то отношение к существующим узлам, необходимо начать транзакцию, в которую упаковываются операции изменения. Исключение составляет только операция чтения. Чтение можно выполнять без создания тран- закций. Ниже приведен код транзакции, которая применяется к БД, граф которой приведен на рис. 4.14, и создает в ней узел и задает его свойства. Здесь транзакция начата функцией success и закончена функцией finish: Transaction.success = database.beginTx(); try { Node друг = GraphDB.createNode(); друг.setProperty("name", “Илья"); Максим.createRelationshipTo(Илья, друг); Иван.createRelationshipTo(Илья, друг); transaction.success(); } finally { transaction.finish(); На рис. 4.15 приведен граф БД после выполнения транзакции на добавление нового узла и его свойств. Друг Иван Анна OAO «Аналитика» Максим Работает веб-программистом с февраля 2019 г. Друг с 2015 г. Коллега с 2019 г. Работает Java- программистом с января 2019 г. Работает разработчиком приложений с марта 2019 г. Илья Друг Рис. 4.15. Графовая БД после добавления нового узла Рассмотрим возможности запросов, которые применяются в графовых БД. Поскольку свойства узла индексируются и свойства отношений также ин- дексируются, то узел или ребро можно найти по значению индекса. Индексы уз- лов задаются либо в момент их добавления в базу данных, либо при их последу- ющем обходе. Если ищем узел Анна в БД на рис. 4.15, то можем запросить индекс для свой- ства name, имеющего значение Анна. Имея этот узел, можем выяснить все его отношения, в том числе входящие и исходящие. При запросе свойств связей можно применять фильтры направлений. Настоящая мощь графовых БД проявляется в ситуациях, когда необходимо обойти граф на любой глубине и указать начальную точку обхода. Это особенно полезно при попытках найти узлы, связанные с начальной точкой, на более чем одном уровне глубины. Одно из преимуществ графовых БД – это разнообразие возможностей по- иска путей между двумя узлами: можно определить, есть ли несколько путей, найти все пути или кратчайший путь. Эта функциональная возможность исполь- зуется в социальных сетях для демонстрации отношений между двумя узлами. Соответствие терминологии, принятой в реляционной модели БД и графо- вой модели БД приведено в табл. 4.5. Табл. 4.5. Соответствие терминов Реляционная модель БД Столбчатая БД Атрибут Узел Строка Подграф Идентификатор строки Индекс узла Таблица Граф Рассмотрим примеры, где БД типа «граф» подходят лучше всего: Связанные данные. Графовые данные можно развернуть и очень эффективно использовать в со- циальных сетях. Вообще любая предметная область с богатыми взаимными свя- зями подходит для описания с помощью графа. Если в одной и той же базе дан- ных существуют отношения между сущностями из разных предметных областей (например, социальные, географические и коммерческие связи), можно повысить их информативность, предусмотрев возможность обхода графа с пересечением границ предметных областей. Маршрутизация, диспетчеризация и геолокационные сервисы. Каждое место назначения или адрес можно представить в виде узла, а все узлы, в которые необходимо выполнить доставку, можно моделировать с помо- щью графа. Отношения между узлами могут иметь отношение, описывающее расстояние. Это позволяет обеспечить эффективную доставку товаров. Свойства расстояния и адреса можно использовать в графах, описывающих предпочтения пользователей, так что приложение может выдавать рекомендации о хороших ре- сторанах или местах для развлечений, расположенных поблизости. Можно также создать узлы для понравившихся точек, например, ресторана, и уведомить поль- зователей, что они находятся поблизости, используя геолокационную службу. Справочные базы данных. После того как в системе созданы узлы и отношения, их можно использовать для выдачи рекомендаций типа «ваши друзья также купили этот товар» или «при заказе этого товара обычно также заказывают следующие товары». У таких спра- вочных баз данных есть один интересный побочный эффект – при увеличении объема баз данных количество узлов и отношений, доступных для выдачи реко- мендаций, быстро увеличивается. В некоторых ситуациях графовые базы данных могут оказаться неприемле- мыми: при необходимости обновлять все или часть сущностей, например, при выработке аналитического решения, в котором свойства всех сущностей могут быть изменены. Изменение свойства во всех узлах является сложной труднореа- лизуемой операцией; при выполнении глобальных операций над графом, то есть тех, что за- трагивают весь граф. Изучение особенностей баз данных типа «граф» позволяет сделать следую- щие выводы: 1. Графовая модель БД – это информационные объекты и отношения между ними, представленные в виде графа. 2. Графовая модель БД не является агрегатно-ориентированной. 3. Единицей хранения в графовых БД является узел (объект) с приписан- ными ему свойствами 4. Основная операция, выполняемая в графовых БД – поиск информации. 5. Для реализации поиска в графовых БД необходимо выполнить индекса- цию узлов и отношений между ними. 6. Изменения в структуре графовой модели БД выполняются с помощью транзакций. 7. Возможность поиска путей между двумя узлами. |