暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

图数据库neo4j,可以了解一下

109

今天分享使用neo4j图数据库的一些内容,但个人觉得想用好并不容易。

1:Nosql非关系型数据库四大流派

  • k/v
  • document
  • 时序数据库
  • 图数据库

图数据库使用节点和关系来代替表、文档,可以将图数据库想象成自己在白板上构建想法,数据存储不受预定义的模型限制,可以以非常灵活的方式思考问题和使用数据。

为什么需要图数据库呢?我们生活在一个万物互联的时间,如果需要理解大部分的领域知识,必须从大量的连接信息中寻找它们是如何产生的,发现事物之间的关系比事物本身重要的多。

那么如何发现事物之间的关系呢?通过传统的关系型数据库查询语言也能完成,比如join语句,但关系型数据库其实处理“关系”很费劲。而图数据的优势在于遍历,能挖掘出潜在的事物之间的关系

图数据库能够解决异构数据(数据源不同、数据存储方式不同)之间的很多问题:

  • 能够有多层次的结构关系
  • 能够挖掘出不同距离节点之间的隐含关系
  • 发现节点之间的内部关系

neo4j是一个开源的图数据库软件,其模型称之为  The property graph model,包含

  • 节点(节点类似于实体,可以有属性)
  • 关系(有开始节点,结束节点,关系方向,也可以有属性)
  • 属性(节点和关系都可以有属性)

2:pclady化妆品库

pclady化妆品库我觉得非常适合图数据库存储,当时还设计了schema,画了一张图:

包含的节点包括:分类、品牌、功效、商品等等,商品等属性则更多。

3:如何具体使用neo4j

neo4j可以虚拟出节点之间的关系,如下图:

那neo4j中的节点、关系如何构建呢?简单举个例子:

# 品牌节点
CREATE (Brand_XNE:Brand {title:'香奈儿'})
CREATE (Brand_YSLD:Brand {title:'雅诗兰黛'})

# 分类节点
CREATE (Class_CZ:PClass {title:'彩妆'})
CREATE (Class_STHL:PClass {title:'身体护理'})

# 品牌和分类之间的关系
CREATE 
(Brand_XNE)-[:BRAND_CLASS {contain:['cz']}]->(Class_CZ),
(Brand_XNE)-[:BRAND_CLASS {contain:['sth']}]->(Class_STHL)

4:如何推理

从节点、关系、属性可以进行推理。

查询一个品牌有哪些系列:

match (brandx:Brand{title:"雅芳"} )-[r]->(seriesx:SERIES) return brandx,seriesx

查询品牌有哪些功效,相当于二级查询:

match (brandx:Brand{title:"香奈儿"} )-[*2]-(effectx:Effect) return brandx,effectx
match p = (brandx:Brand{title:"香奈儿"} )--(goodsx:GOODS)--(effectx:Effect) return p

根据某个功效查询对应商品:

match p =   (effectx:Effect )--(goodsx:GOODS)  return p

查询某个分类商品数量最多的top 3:

match (s:SelfClass )--(:PClass)-[r]-(brandx:Brand) --(:GOODS)
RETURN s.title,brandx.title, count(r) as n 
ORDER BY  n   
limit 3

查询某个主分类,找出其对应的所有功效:

MATCH (CLASSX:PClass )-[:CLASS_SELFCLASS]->(m)-[:SELFCLASS_EFFECT]->(EFFECTX) RETURN  distinct  CLASSX, EFFECTX

个人感觉设计的时候差不多知道了相关关系,挖掘更多潜在的关系貌似并不那么乐观。

文章转载自虞大胆的叽叽喳喳,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论