• 图数据库Neo4j简介


    参考:

    https://www.cnblogs.com/alltoforever/p/12678474.html

    https://zhuanlan.zhihu.com/p/88745411?utm_source=wechat_session

    在日常工作中,关系数据库mysql、Oracle等可以解决大部分问题。但对于某些特殊的场合,他们却无能为力。

    比如对于一些我们并不关注对象的属性,而是更关注他们之间的关系的时候。关系型数据库就变得无能无力了。

    在我经历的一些项目中,用到了非常多的数据表,他们之间有复杂的关系,经过多层的筛选、处理、聚合才得到最终的结果表。

    当有时候你发现一张结果表可能有问题时,你可能会考虑它是从哪里来的,错误的源头在哪里。

    然而,你发现并没有一个很好的工具能够快速得到你想要的结果。

    这种情况下,也许你可以考虑一下图数据库——Neo4j

    Neo4j是一款成熟的图数据库产品。他提供了免费的社区版供大家学习。

    有兴趣的东西可以去这个地址下载

    一、基本概念

    label:标签,对应面向对象编程里的类class

    node:节点,是label的实例,也就是对象,node后面的大括号里放置节点的属性

    relationship:关系,是节点与节点之间的关系,可以自定义

    二、基本操作

    #创建节点
    CREATE (a:Table {name:'ods_ebp_data_service'}) RETURN a
    create(p:PERSON {name:"Mask",age:30,heigh:180,weight:80})-[r:SON_OF]->(f:PERSON {name:"OLD_Mask",age:55,heigh:160,weight:60}) return p,r,f
    #查询单个节点
    MATCH (a:Table {name:'ebp_data_service'}) RETURN a
    MATCH (a:Table) WHERE a.name STARTS WITH 'ads' RETURN a
    MATCH (a:Movie) WHERE a.released > 1990 AND a.released < 2000 RETURN a
    #查询节点和关系
    MATCH (a:Table {name:'ebp_data_service'})-[:IMPORT_FROM]->(m:Table) RETURN a,m
    MATCH (a:Table {name:'ads_ebp_data_service'})<-[:EXPORT_TO]-(m:Table) RETURN a,m
    MATCH (a:Person {name:'Tom Hanks'})-[:ACTED_IN]->(m:Movie) RETURN a,m
    MATCH (m:Movie {title:'Cloud Atlas'})<-[:DIRECTED]-(d:Person) RETURN d
    #查询节点及所有关系节点
    MATCH (a:Table)-[relatedTo]-(b:Table ) 
    RETURN a.name, type(relatedTo), b.name
    #查询关系
    match ()-[r:IMPORT——FROM]-() return startnode(r).name as s, endnode(r).name as e ,type(r) as rtype
    match (a:Table {name:"dwd_ebp_data_service"})-[r]-(b) return a,r,b
    #设置关系1
    MATCH (a:Table {name:'ebp_data_service'}), (b:Table {name:'ods_ebp_data_service'})
    MERGE (a)-[r:IMPORT_FROM]->(b) 
    RETURN a,r,b
    #设置关系2
    MATCH (a:Person {name:'Brie Larson'}), (b:Movie {title:'Captain Marvel'})
    MERGE (a)-[r:ACTED_IN]->(b) SET r.roles = ['Carol Danvers']
    RETURN a,r,b
    #设置关系
    MATCH (a:Person {name:'Liz'}), (b:Person {name:'Mike'}) MERGE (a)-[:FRIENDS]->(b)
    MATCH (a:Person {name:'Shawn'}), (b:Person {name:'Sally'}) MERGE (a)-[:FRIENDS {since:2001}]->(b)
    #修改节点,给节点添加或修改属性
    MERGE (a:Table {name:'ebp_data_service'}) 
    ON MATCH SET a.id= 109
    RETURN a
    MERGE (a:Table {name:'ebp_data_service'}) 
    ON MATCH SET a.name= 'dwd_ebp_data_service'
    RETURN a
    #删除节点
    MATCH (a:Person {name:'Brie Larson'}) DETACH DELETE a
    #删除节点及关系
    match (p:Person {name:"lisi"})-[r]-() delete p,r
    #聚合函数
    match(p:Person) return p.name as name,p.age as age,count(p) as count,max(p.age) as maxAge,min(p.age) as minAge,avg(p.age) as avgAge,sum(p.age) as sumAge

     三、界面展示

    下面我查询了表a以及所有跟a有关系的表b,同时展示他们之间的关系,是不是很强大!

  • 相关阅读:
    假设客车的座位数是9行4列,使用二维数组在控制台应用程序中实现简单的客车售票系统。
    用lua求两个数组的交集、并集和补集。
    Lua 将数组中的某些value设置为nil,打印#数组的长度遇到的问题。
    用Lua编写ACM算法竞赛开灯问题
    EXCEL基础
    微服务的服务粒度该如何权衡
    Linux装cudnn
    How To Install Jenkins on Ubuntu 20.04
    获取heidisql保存的密码
    Spring Framework 远程命令执行漏洞复现(CVE202222965)
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/15905258.html
Copyright © 2020-2023  润新知