Разница между графиком троек и 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.