Разница между графиком троек и EAV

Недавно я начал играть с Cayley и ArangoDB за их хранилища графиков.

Когда я читал и смотрел видео о графовых базах данных, у меня возник вопрос: что делает графическую базу данных настолько отличной (и "удивительной") от типичного (и ужасного) хранилища EAV в обычном SQL?

В этой презентации появляется следующая цитата:

графическая база данных - это любая система хранения, которая обеспечивает смежность без индекса

Но что именно означает отсутствие индекса? И как это влияет на производительность или дизайн?

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

CREATE TABLE "graph" (
    "subject" TEXT NOT NULL,
    "predicate" TEXT NOT NULL,
    "object" TEXT NOT NULL
);

-- Give me all the vertex that go from "A":
SELECT "object" FROM "graph" WHERE "subject" = 'A';

-- Give me all the pairs connected by "C":
SELECT "subject", "object" FROM "graph" WHERE "predicate" = 'C';

-- Give me all the vertex that go to "B":
SELECT "subject" FROM "graph" WHERE "object" = 'B';

-- Give me all the vertex that go to "B" through "C":
SELECT "subject" FROM "graph" WHERE "object" = 'B' AND "predicate" = 'C';

1 ответ

Решение

Ну, честно говоря, смежность без индекса, я в основном маркетинговое модное слово. Я согласен, ваши примеры просты и возможны, но использование графической базы данных позволяет вам выполнять запросы, которые будут не так просты в обработке (и, самое главное, очень плохие) в MySQL. Например, если вы хотите узнать кратчайший путь между двумя вершинами графа, вы не сможете сделать это с помощью mysql.

В ArangoDB это один простой вызов:

GRAPH_SHORTEST_PATH ("yourGraph", "StartVertex", "EndVertex")

Если вас интересуют различные функции, предоставляемые графическим модулем ArangoDBs, я могу порекомендовать прочитать руководство по графам и примеры, я уверен, что вы найдете множество случаев использования, когда вам будет трудно добиться того же в mysql.

Другие вопросы по тегам