图形三元组和EAV之间的差异

时间:2014-12-24 02:39:28

标签: graph-databases entity-attribute-value arangodb cayley

最近,我开始使用cayleyArangoDB来播放他们的图表数据存储。

在阅读和观看有关图形数据库的视频时,我脑海中浮现出一个问题:是什么让图形数据库与普通SQL中的典型(和可怕的)EAV存储区如此不同(和“非常棒”)?

在此presentation中,以下引文显示:

  

图形数据库是提供无索引邻接的任何存储系统

无索引邻接究竟意味着什么?这对性能或设计有何影响?

使用以下架构,幻灯片中列出的所有查询都是可能的,并且非常简单:

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 个答案:

答案 0 :(得分:2)

好吧,说实话无索引邻接我基本上是一个营销术语。 我同意,您的示例很简单,但是使用图形数据库可以实现 在mysql上执行不太容易处理的查询(最重要的是非常糟糕的执行)。 F.E.如果你想知道图中两个顶点之间的最短路径你不能用mysql来做。

在ArangoDB中,这是一个简单的电话:

  

GRAPH_SHORTEST_PATH(“yourGraph”,“StartVertex”,“EndVertex”)

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