Neo4j学习

建模

图数据结构

属性图结构
X

  • 包含节点和边,同时节点和边上又有属性property和标签label
  • 边有名字和方向

图数据库查询语言

  • Cypher
    应用于Neo4j、GDB等
  • Gremlin
    应用于GDB

跨域模型

在节点和关联关系不是很复杂的情况下,我们建的图通常只有一个领域的内容,比如人与人之间的关联图谱。但是随着业务的发展,我们会觉得单一的人物关系不能满足我们的使用需求,我还希望加入企业注册数据,来进行企业与人之间的管理分析。随后,我们陆续加入了法律诉讼信息、新闻资讯信息等,这样我们的图从一张小图变成了大图,也从只有一个领域(人)的模型变成了多个领域的跨域模型。
跨域模型有助于我们理解复杂的价值链背后的关联,不仅可以联合多个领域,而且每个领域的内容又能单独区分开来。这里主要借助了图数据里的2个概念:属性图和标签。属性图模型让不同的领域很容易联系起来,这样每个域都是可达的;标签既能表示不同节点在域中扮演的角色,又可以让我们将它归属的节点和元数据结合起来

面向查询设计

建模其实就是利用图结构来描述问题的过程,为了使我们的模型更接近业务需求,有一个方法,叫做面向查询设计:

  • 将需求转化为领域问题
  • 明确领域内出现的节点和关系
  • 把这些节点和联系翻译成查询语言
  • 使用路径表达式,描述需要解决的问题

使用图查询语言构建数据模型

1
2
3
4
5
6
7
8
# 创建带有属性name和age的People节点
create(p:People{name:"Alex", age:20});
# 匹配 People节点,并返回其 name 和 age 属性
match (p:People) return p.name, p.age
# 匹配所有 age 为20的 People 节点
match (p:People{age:20}) RETURN p
# 创建单向的Friend关系
create(:People{name:"Alex", age:20})-[r:Friends]->(:People{name:"Tom", age:22})

参考

  1. 《一起学图数据库》之四:理论与实践齐飞,聊聊图数据库的建模
  2. 《一起学图数据库》之五:再谈建模
  3. 一文教你用 Neo4j 快速构建明星关系图谱
  4. Neo4j - CQL简介
  5. Neo4j Developer Manual
  6. Gremlin