Neo4j:面向领域模型的图数据库--讲解与Eleme使用实战

2020-05-20 00:00:00 数据 数据库 模型 接口 数据结构

Neo4j:面向领域模型的图数据库

通常谈到数据库或数据存储,我们一般会立刻想到Mysql、SQLServer、Oracal等关系型数据库,或HBase、Redis、MongoDB等非关系型数据库。今天要介绍的图数据库--Neo4j也是一种非关系型数据库。

在工程项目中,数据存储的选择基本直接决定了开发和维护的难度。在技术选型时,如果应用场景不仅是模型自身的属性(例如,增删改查的逻辑等),还更关注模型之间的“关系”,那么就可以尝试使用Neo4j了。Neo4j使用图的概念:“节点”和“关系”来存储数据与数据间的关联,由于不需要固定的schema,可以随项目发展扩展节点上的属性,带来优于传统数据库的便利行和扩展能力。

还是举例来讨论其中的异同,假设我们为某高校开发一套简单选课系统,分别使用MySql和Neo4j来实现。

我们和产品经理一番讨论需求后,抽象出“老师、学生、课程”三个概念,包含“老师授课”,“学生选课”两个关联关系,画一个模型图就如下所示:

采用MySql来实现,构建几个基本的数据库表,可能如下:

其中可以看到为了实现达到数据库设计的“第三范式”,相关关联表中我们都必须带上相应数据的id,既要避免数据的冗余,又要串联起相互之间的关联关系。有过相关开发经验的朋友应该能理解,如果领域模型大多是多对多的关系,其中复杂的关联主键就可能要超过一半的数据库字段。而且这个简单的例子中只有三个概念,如果数量更多,关联关系会更复杂。如果是Neo4j,会是怎么样的一种实现方式呢?
首先,Neo4j里的模型设计就和我们初的概念交互图一摸一样,可以用下面这个式子表示:

(:Student{name})-[:CHOOSE]->(:Course {name})<-[:TEACH]-(:Teacher{name})

相关文章