最近我开始使用 cayley 和 ArangoDB 来构建他们的图形数据存储。
在阅读和观看有关图数据库的视频时,一个问题突然出现在我的脑海中:是什么让图数据库与普通 SQL 中的典型(且可怕的)EAV 存储如此不同(且“很棒”)?
在此演示文稿中,出现以下引文:
图形数据库是任何提供无索引邻接的存储系统
但是无索引邻接到底是什么意思呢?这对性能或设计有何影响?
使用以下架构,幻灯片中列出的所有查询都是可能的并且超级简单:
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';
无索引邻接是一个营销流行语。
我同意你的例子既简单又可行,但是使用图形数据库可以让你执行 MySQL 无法很好处理的查询。例如,如果您想知道图中两个顶点之间的最短路径,则无法使用 MySQL 来实现。
在 ArangoDB 中,这是一个简单的调用:
GRAPH_SHORTEST_PATH(“yourGraph”,“StartVertex”,“EndVertex”)
如果您对ArangoDB的图形模块提供的各种功能感兴趣,我推荐图形手册和示例。我很确定您会发现很多用例,您很难在 MySQL 中实现相同的目标。