图形三元组和EAV之间的区别



最近我开始使用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上执行不那么容易处理(最重要的是性能非常差)的查询。F.e. 如果你想知道图中两个顶点之间的最短路径,你不能使用 mysql 来做到这一点。

在ArangoDB中,这是一个简单的调用:

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

如果您对 ArangoDB 图形模块提供的各种功能感兴趣,我可以推荐阅读图形手册和示例,我很确定您会发现很多用例,在这些用例中,您将很难在 mysql 中实现相同的目标。

最新更新