实际上为了更好的描述实体之间的关系,我们要是再继续使用Redis的话,是不是感觉实体之间的关系不够那么的明显,虽然也是属于NoSQL的一种,但是相对来说,Redis,表现实体之间的关系就没有那么清晰了,为了更好的描述实体之间的关系,就会使用图形数据库来进行了,那么今天阿粉介绍的,就是一个图形化的数据可,Neo4J。什么是Neo4J Neo4j是一个世界领先的开源的基于图的数据库。它是使用Java语言完全开发的。那么什么是图数据库呢?图数据库是以图结构的形式存储数据的数据库。它以节点,关系和属性的形式存储应用程序的数据。正如RDBMS以表的行,列的形式存储数据,GDBMS以图的形式存储数据。 RDBMS与图数据库的区别 1。Tables表Graphs图表 2。Rows行Nodes节点 3。ColumnsandData列和数据Propertiesanditsvalues属性及其值 4。Constraints约束Relationships关系 5。Joins加入Traversal遍历 说完了图形数据库,我们就来看看这个Neo4J数据库吧Neo4J数据库的安装 neo4j是用Java语言编写的图形数据库,运行时需要启动JVM进程,因此,需安装JAVASE的JDK。关于Java怎么安装,我就不用再多废话了吧,到时候别忘了检测一下Java的版本就好了,javaversion 接下来我们就是要进行一个安装了,我们先去官网,下载社区版,企业版要收费的,注意哈。 官网地址 下载完成,直接开始安装,傻瓜式操作即可。 Neo4j应用程序有如下主要的目录结构:bin目录:用于存储Neo4j的可执行程序conf目录:用于控制Neo4j启动的配置文件data目录:用于存储核心数据库文件plugins目录:用于存储Neo4j的插件 注意,如果你使用的是Zip的压缩包来进行的使用的话,那么你就需要注意一些地方,比如你如果是用Zip的包解压之后,并且想要通过bat的命令启动,直接在目录下进行cmd,然后neo4j。bat,这时候可能会出现一个问题,就是版本可能会出现问题,你如果下载使用的是最新版的Neo4J,那么就可能会让你使用JDK11,而阿粉就是踩过了这个大坑之后,才发现,bat闪退的原因。警告:ERROR!Neo4jcannotbestartedusingjavaversion1。8。0181警告:PleaseuseOracle(R)Java(TM)11,OpenJDK(TM)11torunNeo4jServer。Pleaseseehttps:neo4j。comdocsforNeo4jinstallationinstructions。InvokeNeo4j:ThisinstanceofJavaisnotsupported所在位置E:softFileeo4jcommunity4。4。2bineo4j。ps1:21字符:7Exit(InvokeNeo4jVerbose:Arguments。VerboseCommandArgsArgument。。。CategoryInfo:NotSpecified:(:)〔WriteError〕,WriteErrorExceptionFullyQualifiedErrorId:Microsoft。PowerShell。Commands。WriteErrorException,InvokeNeo4j 这样就是说明我们的JDk的版本对应的和Neo4J需要的JDK是不匹配的,我们就需要换一下我们的JDK了。把他换成JDK11就好了,再次启动。neo4j。batconsoleE:softFileeo4jcommunity4。4。2binneo4j。batconsoleDirectoriesinuse:home:E:softFileeo4jcommunity4。4。2config:E:softFileeo4jcommunity4。4。2conflogs:E:softFileeo4jcommunity4。4。2logsplugins:E:softFileeo4jcommunity4。4。2pluginsimport:E:softFileeo4jcommunity4。4。2importdata:E:softFileeo4jcommunity4。4。2datacertificates:E:softFileeo4jcommunity4。4。2certificateslicenses:E:softFileeo4jcommunity4。4。2licensesrun:E:softFileeo4jcommunity4。4。2runStartingNeo4j。2021121912:37:08。1210000INFOStarting。。。2021121912:37:09。6650000INFOThisinstanceisServerId{25e1fcb1}(25e1fcb1702c4b58bcdc3564df95b2a1)2021121912:37:11。9570000INFONeo4j4。4。22021121912:37:14。5560000INFOInitializingsystemgraphmodelforcomponentsecurityuserswithversion1andstatusUNINITIALIZED2021121912:37:14。5670000INFOSettingupinitialuserfromdefaults:neo4j2021121912:37:14。5680000INFOCreatingnewuserneo4j(passwordChangeRequiredtrue,suspendedfalse)2021121912:37:14。5890000INFOSettingversionforsecurityusersto32021121912:37:14。5940000INFOAfterinitializationofsystemgraphmodelcomponentsecurityusershaveversion3andstatusCURRENT2021121912:37:14。6010000INFOPerformingpostInitializationstepforcomponentsecurityuserswithversion3andstatusCURRENT2021121912:37:15。9790000INFOBoltenabledon127。0。0。1:7687。2021121912:37:17。2000000INFORemoteinterfaceavailableathttp:localhost:74742021121912:37:17。2060000INFOid:1ED17593750B5E6E3046A68E5254B92B64EE0B6CECA021D540D1B93BDFE671642021121912:37:17。2060000INFOname:system2021121912:37:17。2070000INFOcreationDate:20211219T12:37:12。956Z2021121912:37:17。2070000INFOStarted。 这时候,我们就直接访问localhost:7474的端口,直接就能看到如下的画面,1。jpg 刚进入的时候可能需要大家输入帐号密码,默认的帐号密码就是,neo4j修改成你想要的就行了。 这样登录进去我们就能开始正式学习Neo4J的所有内容了。Neo4J的语法教学 Neo4jCQL语法它是Neo4j图形数据库的查询语言。它是一种声明性模式匹配语言它遵循SQL语法。它的语法是非常简单且人性化、可读的格式。 我们在讲语法之前首先我们先得看看Neo4J的构建模块,不然之后的查询都是无意义的。 Neo4j图数据库主要有以下构建块节点属性关系标签数据浏览器 节点是图表的基本单位。它包含具有键值对的属性,如下所示 属性是用于描述图节点和关系的键值对 关系是图形数据库的另一个主要构建块。它连接两个节点,如下所示。 Label将一个公共名称与一组节点或关系相关联。节点或关系可以包含一个或多个标签。我们可以为现有节点或关系创建新标签。我们可以从现有节点或关系中删除现有标签。 Neo4j数据浏览器一旦我们安装Neo4j,我们可以访问Neo4j数据浏览器使用以下URL http:localhost:7474browserCQL语法 CREATE语法 CREATE(:) 它是我们要创建的节点名称。 它是一个节点标签名称 我们可以创建一个节点,然后给他安排上一个标签 CREATE(emp:Employee) 当我们看到 Added1label,created1node,completedafter74ms。 这就创建成功了, 那么怎么查看呢? MATCH语法 MATCH(:)returnxxx 是这个样子的MATCH(emp:Employee)returnempemp{} 但是看到里面竟然没有东西,就相当于是一个空的对象,那是不是就应该给里面放入属性的操作呢?没错,肯定有 CREATE(emp:Employee{id:1001,name:lucy,age:10}) Added1label,created1node,set3properties,completedafter163ms。创建成功。 我们再次查看就能看到emp{}{name:lucy,id:1001,age:10} 如果我们想只要其中的一些对象的属性,而不是全部属性,那应该怎么操作呢? RETURN语法 RETURN可以返回的是一个对象,也可以是对象中的属性,比如:MATCH(emp:Employee)returnemp。name 结果就是下面这个样子的,大家看一下,是不是感觉还是挺好用的。emp。nameLokeshjackluxunlucy WHERE语法 WHERE 为什么在前面的位置阿粉说,CQL是和SQL类型的,这完全是因为很多东西和SQL是类似的。MATCH(emp:Employee)whereemp。namejackreturnemp 结果如下:emp{name:jack,id:125,deptno:10,sal:35800} 相同的还有 布尔运算符描述AND和OR或者NOT非XOR异或 比较运算符描述等于运算符不等于运算符小于运算符大于运算符小于或等于运算符。大于或等于运算符。 DELETE语法 删除语法必然是有的,因为有创建,肯定有删除。 DELETE 但是这个命令也不是单独使用的哈, MATCH(e:Employee)DELETEe 直接删除成功。 基础的东西讲完了,阿粉就得说说这个比较重要的内容了,关系,Neo4j的关系 我们之前创建节点的时候,那叫一个简单舒适加愉快,但是创建关系就比较复杂了,因为需要考虑如何匹配到有关系的两个节点,以及关系本身的属性如何设置。这里我们就简单学一下如何建立节点之间的关系。 由于Neo4jCQL语法是以人类可读的格式。Neo4jCQL也使用类似的箭头标记来创建两个节点之间的关系。 每个关系()包含两个节点 在Neo4j中,两个节点之间的关系是有方向性的。它们是单向或双向的。 如果我们尝试创建一个没有任何方向的关系,那么就会报错。 关系创建语法 CREATE()〔〕() 我们这里直接使用创建新的节点来创建关系。CREATE(book:Book)〔contains:CONTAINS〕(bookStore:BOOKSTORE) 提示创建成功Added2labels,created2nodes,created1relationship,completedafter199ms。 这里关系名称是CONTAINS 关系标签是contains。MATCH(book:Book)〔contains:CONTAINS〕(bookStore:BOOKSTORE)returncontains 这么看是看不出有啥关系的,但是,我们可以从另外的一个位置 这样看下来,这个Neo4J简单操作是不是就学会了,阿粉接下来的文章中讲怎么使用Java来操作Neo4J数据库。欢迎大家来观看。