图数据库如何实现灵活模式?

时间:2018-12-10 19:31:05

标签: relational-database database-schema data-modeling graph-databases

我从许多在线资源中读到,图数据库的优点之一是灵活的架构。但是还没有找到确切的实现方法。

Wikipedia says“图形非常灵活,这意味着用户可以在不损失应用程序功能的情况下将新数据插入到现有图形中。”但这也是我们在关系数据库中也可以做到的,至少一个范围。

有人可以对此进行更多说明吗? 谢谢。

编辑:举一个例子使其更清晰:

Take for example a User table:

  FirstName|LastName|email|Facebook|Twitter|Linkedin|

现在,某些用户可能拥有FB,而没有Twitter和Linkedin,反之亦然。也许他们有多个电子邮件ID?您如何表示呢?

Graph DB: 
Vertices for User, FB_Link, Twitter_Link, Email. 
Edges (from User) to FB, Edge to Twitter, Edge to Linkedin, Edge to Email (x 2 times) etc.



Json/DocumentDB: 
  {
  ID:
  FirstName:
  LastName:
  FB:
  }
  {
  ID:
  FirstName:
  LastName:
  Twitter:
  Linkedin:
  }

  Notice that the documents can have different attributes.

我对模式灵活性的上述解释正确吗?还有更多吗?

1 个答案:

答案 0 :(得分:2)

Wikipedia文章用以下语句简化了事情:

  

允许用户将新数据插入到现有图形中,而不会丢失应用程序功能

任何数据库都允许您插入数据而不会丢失应用程序功能。宁可让我们专注于图数据库的灵活模式方面,因为这是有区别的。

简要说明

SQL建立在relational model上,它可以在数据记录之间执行严格的一致性检查。它通过对结构更改强制执行锁定来实现。图形数据库建立在property graph模型上,并且没有任何这种关系约束。这意味着没有锁(在大多数情况下)。它仅对通过边连接在一起的称为顶点的构造强制执行键-值对

在讨论了上下文之后,让我们谈谈您的主要问题:

如何实现灵活的架构

由于属性图在形式上没有任何要满足的约束规则才能起作用,因此您几乎可以在任何数据源上强制执行图表示。从技术上讲,即使选择没有索引的sql表,也是如此。

这实际上是如何完成的,尽管每个图数据库都有所不同。目前该领域缺乏标准化。例如,

  • JanusGraph在不同的NoSql DB上运行,例如宽列存储和文档存储。
  • OrientDB使用json文档存储。
  • RedisGraph使用内存中的键值存储。
  • Neo4j使用的是我自己不熟悉的数据模型。

注意:以上所有内容如何将NoSQL DB用作主干。这就是实现灵活方案的方式。所有这些图形数据库仅将数据存储在没有“无”规则的关系数据库/表之外。文档存储和json是一个很好的例子。

如果您对属性图模型的示例实现感到好奇,可以查看Neo4j的模型或JanusGraphs' Docs或它们的models的一般比较