NEO4J 图数据库哪里和哪里 从哪里开始

Wesley13
• 阅读 580

NEO4J  图数据库哪里和哪里 从哪里开始

上期已经安装了图数据库,本期就该讨论到底这个图数据库里面的一些基本的概念和如何操作。最近听到一句话,年轻不年轻,不是看年龄,而是看你对新鲜事物的热情,即使你20岁,谈起新事物也是一脸的不屑,只能说明身体和灵魂分了家。闲话不谈 回归正题。

节点和节点之间可以存在多种关系,单向,双向

NEO4J  图数据库哪里和哪里 从哪里开始

上图是一个人际关系图,其中的每个人的关系是凌乱的,一个人对另外的几个人之间的角色也是不同的,这里NEO4J 通过 lable 来定位一个节点(方块位置)在整体中的扮演的角色,例如这张图中“某公司的客户”,就是定义这群人在这个图中的角色,都是某公司的客户。用这样的概念可以将这些人,进行一个一致性的分类。

理解NEO4J 中的关键的几个属性:

1 节点:下图中每个方块可以看做一个节点

2 属性:每个节点有多个属性,以 KEY VALUE 的形式来进行描述

3 关系: 节点和节点之间的关系,也是通过key value的方式来存储,同时节点和节点的关系不唯一,可以双向

4 标签:标签就是这组节点的共性,例如都是某公司的职员,或者摇身一变都是一个城市的市民 ,标签是标记每个节点之间的相同点

NEO4J  图数据库哪里和哪里 从哪里开始

个人浅薄的理解

1 节点,可以理解为传统数据的行的概念

2 关系:就是表和表之间 join 的概念  (这也是比传统数据库高明的地方,其实还是空间换了时间),关系本身也是带有方向和属性的,这也是传统数据库本身做不到的地方

3 属性:理解为一个MONGODB 里面的document,一个节点会有多种属性

4 标签:理解为mongodb里面的collection 或者 传统数据库中的表,但一个节点可以属于多个表,这个又超越了传统数据库的理解的理念。

图数据库是什么个人总结一下,一个通过key value来存储数据,并且在在查询前就建立了JOIN关系的,数据字段属于多个表的 “weirdo” 出现了。

实际上在安装完neo4j 本身他就拥有自己的exmaple 的指导

NEO4J  图数据库哪里和哪里 从哪里开始

在输入 :play movie graph 后,你可以看到上图从如何创建,一个实例的图,找寻数据,查询数据等等这些操作

点击箭头,可以将要执行的sample movie 库,在执行框中执行,执行后结果如下。

NEO4J  图数据库哪里和哪里 从哪里开始

下面贴部分代码,并辅以解释,加速学习进度

1 建立节点和属性
CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})
CREATE (Keanu:Person {name:'Keanu Reeves', born:1964})
CREATE (Carrie:Person {name:'Carrie-Anne Moss', born:1967})

上面两句话创建了三个节点,

1 TheMatrix 

2 Keanu

3 Carrie

这三个节点具有两个lable 也就是这三个节点目前属于两个表

1 Movie

2 Person

而这三个节点, {} 中的信息是代表这个节点的属性,也就是这个节点的内部信息,相当于字段以key value 形式表达,或直接理解为 mongodb的部分知识

所以建立节点需要几个信息,1 节点本身,2 节点属于哪个lable 3 节点本身的属性信息, 下面就开始创建相关的关系,也就是节点和节点之间爱你的关系

CREATE
(Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix),
(Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrix),
(Laurence)-[:ACTED_IN {roles:['Morpheus']}]->(TheMatrix),
(Hugo)-[:ACTED_IN {roles:['Agent Smith']}]->(TheMatrix),
(LillyW)-[:DIRECTED]->(TheMatrix),
(LanaW)-[:DIRECTED]->(TheMatrix),
(JoelS)-[:PRODUCED]->(TheMatrix)

首先上面这句话的意思是(翻译成人类能看懂的文字)

1 keanu 作为一个演员在TheMatrix电影里面扮演了 Neo这个角色,同时

Carrie在TheMatrix 这个电影里面扮演了Trinity 这个角色,Laurence 在TheMatrix 电影里面扮演Morpheus角色,Hugo在TheMatrix 扮演Agent Smith 角色,LillyW LanaW Joels 导演了TheMatrix 这部电影。

通过这一个语句,将六个人与这部电影的关系描述清楚。

在能读懂一些简单的创建节点和关系的语句后,我们来一边创建创建节点,一边查询节点,加快理解的速度

CREATE (TomH:Person {name:'Tom Hanks', born:1956})

创建一个节点 TomH ,然后查询这个节点通过节点的属性

如果不理解,这里通过传统的数据库来翻译一下

select tom from Person where name = 'Tom Hanks';

NEO4J  图数据库哪里和哪里 从哪里开始

CREATE (CloudAtlas:Movie {title:'Cloud Atlas', released:2012, tagline:'Everything is connected'})

创建一个MOVIE的节点,叫CloudAtlas ,并且相关的电影的title, released, tagline 等字段的内容

查询 tilte 等于 Cloud Atlas 返回节点本身

select  CloudAtlas from Movie WHERE title = 'Cloud Atlas'

NEO4J  图数据库哪里和哪里 从哪里开始

下面这张图的意思是 查找tom hanks 到底演过几部电影

NEO4J  图数据库哪里和哪里 从哪里开始

当然写到这里我也是纳闷了两天 tom 和 tomHanksMovies 我根本就没有在任何地方输入过这些信息到NEO4J中,到底他们是怎么展示的这些信息,在经过琢磨后,照猫画虎的写出了下面查询Keanu 到底演过什么电影的查询语句。同样 K,Kmovies 我都没有输入过,到底是怎么回事???

NEO4J  图数据库哪里和哪里 从哪里开始

See you next time

NEO4J  图数据库哪里和哪里 从哪里开始

本文分享自微信公众号 - AustinDatabases(AustinDatabases)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这