图形数据库Neo4j的核心概念

我们的使用场景是用来存知识图谱有关的数据简单说就是会把从小学到高中所有的科目的里面的知识点给存储起来,让后建立知识点与知识点之间的依赖关系,从而最终会形成一张复杂的知识网络。举个例子:

比如某个学生,要学习化学里面的某个知识点,但是这个知识点可能与物理有联系,也可能这个知识点与数学也有联系,想要学习和掌握这个知识点,他应该怎么做呢?有了知识图谱网络,就能帮他快速的提供一些有用的信息:

(1)告诉他先学习那几个知识点

(2)告诉他这个知识点有几种途径

(3)告诉他最快的掌握方式是什么

(4)如果掌握了,通过知识点与题目的关联,能给他出一些起到练习巩固的效果

(5)其他....

当然有了图谱数据之后,其实能从里面挖掘出很多其他的信息,当然需要跟具体的业务结合,才能产生的真正的价值。比如北京市的公交站地图或者地铁地图。

什么是Cypher?

cypher是neo4j官网的提供的声明式图谱查询语言,用来可视化查询展示图谱里面的节点和关系,围绕图谱查询提供了可读性好和容易使用,功能强大的众多优点。

按照官网的说法,cypher的产生,参考了动态编程语言的一些语法,如python,ruby,scala,有非常多的强大的函数库,我们也项目里也用了一些复杂的语法,确实非常强大,不过想要运用自如,确实得花一定时间测试使用才行。

下面介绍下neo4j的几个核心概念:

(1) Nodes(节点,类似地铁图里的一个地铁站)
图谱的基本单位主要是节点和关系,他们都可以包含属性,一个节点就是一行数据,一个关系也是一行数据,里面的属性就是数据库里面的row里面的字段。

除了属性之外,关系和节点还可以有零到多个标签,标签也可以认为是一个特殊分组方式。

(2) Relationships(关系,类似两个相邻地铁站之间路线)
关系的功能是组织和连接节点,一个关系连接2个节点,一个开始节点和一个结束节点。当所有的点被连接起来,就形成了一张图谱,通过关系可以组织节点形成任意的结构,比如list,tree,map,tuple,或者更复杂的结构。关系拥有方向进和出,代表一种指向。

(3) Properties(属性,类似地铁站的名字,位置,大小,进出口数量等)
属性非常类似数据库里面的字段,只有节点和关系可以拥有0到多个属性,属性类型基本和java的数据类型一致,分为 数值,字符串,布尔,以及其他的一些类型,字段名必须是字符串。

(4) Labels(标签,类似地铁站的属于哪个区)
标签通过形容一种角色或者给节点加上一种类型,一个节点可以有多个类型,通过类型区分一类节点,这样在查询时候可以更加方便和高效,除此之外标签在给属性建立索引或者约束时候也会用到。label名称必须是非空的unicode字符串,另外lables最大标记容量是int的最大值,近似21亿。

(5) Traversal(遍历,类似我们看地图找路径)
查询时候通常是遍历图谱然后找到路径,在遍历时通常会有一个开始节点,然后根据cpyher提供的查询语句,遍历相关路径上的节点和关系,从而得到最终的结果。

(6) Paths(路径,类似从一个地铁站到另一个地铁站的所有的到达路径)
路径是一个或多个节点通过关系连接起来的产物,例如得到图谱查询或者遍历的结果。

(7) Schema(模式,类似存储数据的结构)
neo4j是一个无模式或者less模式的图谱数据库,像mongodb,solr,lucene或者es一样,你可以使用它不需要定义任何schema,

Indexes(索引)

遍历图通过需要大量的随机读写,如果没有索引,则可能意味着每次都是全图扫描,这样效率非常低下,为了获得更好的性能,我们可以在字段属性上构建索引,这样任何查询操作都会使用索引,从而大幅度提升seek性能,

构建索引是一个异步请求,并不会立刻生效,会再后台创建直至成功后,才能最终生效。如果创建失败,可以重建索引,先删除索引,在创建即可,然后从log里面找出创建失败的原因然后分析。

Constraints(约束)

约束可以定义在某个字段上,限制字段值唯一,创建约束会自动创建索引。

你可能感兴趣的:(图形数据库Neo4j的核心概念)