Объектно-ориентированное программирование в базах данных Graph - PullRequest
1 голос
/ 06 августа 2011

Графические базы данных хранят данные в виде узлов, свойств и отношений.Если мне нужно извлечь некоторые конкретные данные из объекта на основе запроса, то мне нужно будет извлечь несколько объектов (поскольку у запроса может быть много результатов).

Рассмотрим этот простой сценарий в объектно-ориентированном программированиив графе базы данных:

У меня есть (граф) база данных пользователей, где каждый пользователь хранится как объект.Мне нужно получить список пользователей, живущих в определенном месте (свойство места хранится в объекте пользователя).Итак, как бы я это сделал?Я имею в виду, что ненужные данные будут извлекаться каждый раз, когда мне нужно что-то делать (в этом случае может потребоваться весь объект пользователя).Разве функциональное программирование не лучше в графовых базах данных?

Этот пример - просто простая аналогия вышеупомянутого вопроса, который мне пришёл в голову.Не принимайте это в качестве ориентира.Итак, остается вопрос: Насколько велико объектно-ориентированное программирование в графовых базах данных?

Ответы [ 4 ]

3 голосов
/ 07 августа 2011

База данных графа - это не просто вершины и ребра. В большинстве графовых баз данных, таких как neo4j, помимо вершин, имеющих id, и ребер, имеющих label, они имеют список свойств. Обычно в базах данных графов на основе Java эти свойства ограничены приматами Java - все остальное необходимо сериализовать в строку (например, даты). Это сопоставление со свойствами вершины / ребра может быть выполнено вручную с использованием таких методов, как getProperty и setProperty, или вы можете использовать что-то вроде Frames , средство сопоставления объектов, которое использует TinkerPop стек.

1 голос
/ 08 августа 2011

Большинство графовых баз данных имеют как минимум один вид индекса для вершин / ребер.Например, InfiniteGraph поддерживает B-Trees, Lucene (для текста) и распределенный масштабируемый индексный тип.Если у вас нет индекса в поле, которое вы пытаетесь использовать в качестве фильтра, вам нужно будет просмотреть график и применить предикаты самостоятельно на каждом шаге.Надеемся, что это уменьшит количество узлов, которые нужно пройти.

1 голос
/ 06 августа 2011

Каждый узел имеет атрибуты, которые можно сопоставить с полями объекта. Вы можете сделать это вручную или использовать spring-data для сопоставления.

0 голосов
/ 27 октября 2015

Цитата Мне нужно получить список пользователей, живущих в определенном месте (свойство места хранится в объекте пользователя).

Есть лучший способ.Отдельное местоположение от пользователя.Вместо того, чтобы иметь местоположение в качестве свойства, создайте узел для местоположений.Таким образом, вы можете иметь (u:User)-[:LIVES_IN]->(l:Location) тип отношений.

становится проще получить список пользователей, живущих в определенном месте, с помощью простого запроса:

match(u:User)-[:LIVES_IN]->(l:Location) where l.name = 'New York'.
return u,l.

Это вернет всех пользователейжить в Нью-Йорке без необходимости сканировать все свойства каждого узла.Это более быстрый подход.

...