Neo4j 学习笔记1

基础知识

NoSQL (Neo4j) 比MySQL查询速度快很多,这与图结构有关,MySQL的查询时间随数据库大小(查询深度)指数增长,而Neo4j使用遍历API的查询时间是线性增长。
SQL是关系型技术使用的一种语言,全称是Structured Query Language,是“结构化查询语言”。
实际上NoSQL数据库应该属于非关系数据库,其中包含图形数据库,Neo4j就是一种通用图形数据库。

NoSQL的分类

  • 主键值存储:处理大量并发访问数据,比如缓存。存在哈希表中使用put-get(write-read)操作
    • 缓存,快速读取访问简单域,大规模并发系统
    • Redis, Memcached, Tokyo Cabinet
  • 列族存储:分布式主键值,大数据时保持高性能和高可用性
    • 大规模写入,并发数据访问(读写)
    • Google BigTable, Cassandra,Apache HBase
  • 面向文档的数据库:简单文件,无架构,可以添加自包含文件和关联关系。类似以文件作为键值。
    • 当域模型是自然文件,自然文件数据结构简化开发,高可扩展系统
    • MongoDB, CouchDB
  • 图形数据库:数据以非自然方式存储,图形遍历查询效率性能好
    • 互联数据,节点关系表示的域,社交网络,推荐引擎,访问控制列表
    • Neo4j, AllegroGraph, OrientDB

Neo4j理解

与ACID兼容,为原子性A,一致性C,隔离性I,持久性D。是一个事务数据库

Neo4j版本

目前已更新到版本5,可以分多种版本

  • Neo4j Server
    • Neo4j Enterprise 企业版,比社区版多一部分功能,支持数据库集群,对超大规模数据存储的支持,对更多CPU内核查询执行优化,在线备份等DBA功能,其他组件比如Bloom
    • Neo4j Community 社区版,完全开源的Java软件项目,GPL v3开源协议
    • Neo4j Desktop 桌面端,包含试用的企业版,有应用管理器,图形化界面
  • Neo4j Driver
  • Neo4j Integration & Connectors

使用方式

  1. Cypher图数据库查询语言
    Cypher可以在Neo4j Browser1 或者通过浏览器中执行,也可以在cypher-shell2中、通过命令行执行,或者作为过程参数在Neo4j应用客户端执行。

  2. Neo4j应用客户端Desktop
    客户端应用可以以类似JDBC3或ODBC4的方式从远程访问数据库、提交Cypher查询,并接收返回结果。Neo4j官方提供的客户端驱动支持以下5种语言:Java, JavaScript, Net, Python, Go
    语言的驱动可以从这里访问:neo4j官方
    Neo4j的社区用户还开发了其他语言驱动,包括C/C++、R等;以及应用开发框架来简化实现、封装操作,最常用的当属SDN(数据集成)5(官方,教程)、以及OGM(对象封装)6

  3. Neo4j服务器端扩展
    Neo4j是纯Java应用,支持在服务器端部署的JAR包来扩展数据库功能。JAR包中的过程和函数可以在Cypher语句中调用。最有名的服务器端扩展有:APOC,ALGO(最短路径搜索,中心性,社区检测,相似度,链接预测功能)。服务器端扩展可以使用Neo4j核心数据库提供的遍历框架(Traversal Framework) ,以及核心API(Core API)来实现需要的功能。

桌面端下载安装

官网前往官网下载并安装
企业版本收费,桌面版本与社区版本均免费,区别在于桌面端有可视化客户端,社区版本运行都是在命令行。
官网首页
找安装程序

找程序
找程序
剩下就是填表下载,软件免费,验证邮箱注册即可。可以选择安装位置和数据存储位置,由于一般数据库较大,数据存储位置尽量留较多的存储空间,不建议放C盘。

桌面端基本使用

第一次打开软件速度较慢
软件初始化
提示更新时暂时没有更新,选了later
桌面端菜单栏
桌面端菜单栏包括:项目,数据库和图软件。
项目栏一个项目可以调用多个数据库,可以是本地数据库,也可以是远程数据库。新建本地数据库时可以改变Neo4j的版本,如果存在未使用过的版本,新建后会自动下载。
数据库栏链接的数据库会在按照版本排列,数据库有红色stop,黄色Starting和绿色Active三种状态
图软件当数据库运行时,可以在图软件中使用Neo4j Browser工具进行手动输入数据。或者直接open里面选择打开方式为Neo4j Browser。

项目链接数据库
新建数据库
数据库栏
运行数据库

Neo4j Browser

界面
Database information里面包括节点,关系,属性值,数据库连接信息和数据库信息介绍。通过选中可以在右边打开新窗口进行可视化。
右上为命令行,可以使用cypher语言来新建节点和关系。

create (Variable:Label{Key1:Value1,......)})return Variable
create(n:大学{name:“武汉大学”}),(:大学{name:“北京理工大学”})
create (n:Stock{name:'安琪酵母',code:'600298',launchDate:date("2000-08-18")})return n
create(n:Stock{name:'招商银行',code:'600036',launchDate:date("2002-04-09")}),(:Stock{name:'中科创达',code:'300496',launchDate:date("2015-12-10")}),(:Stock{name:'华工科技',code:'000988',launchDate:date("2000-06-08")}),(:Stock{name:'国信证券',code:'002736',launchDate:date("2014-12-29")})
MATCH(p1:`大学`),(p2:`院系`)Create(p1)-[r:院系]->(p2)
//点击运行

删除节点

//根据id删除节点
MATCH (r)
WHERE id(r) = 6
DELETE r

查询节点

MATCH(a:Stock)WHERE a.name = '安琪酵母' RETURN a

可视化
隐藏节点,显示属性(关系)

查询某个标签的所有节点

MATCH(a:Stock)  RETURN a

查询节点间关系

MATCH(:Stock{name:'安琪酵母'})-[r]->(:Province{name:'湖北'}) RETURN type(r)

获取该节点的所有关系类型

MATCH(:Stock{name:'安琪酵母'})-[r]->() RETURN type(r)

删除节点(先删除关系后才可以删除节点)

MATCH(a:Stock)WHERE a.name='中科创达' DELETE a

删除某标签所有节点或所有节点

MATCH(n:Stock)
DELETE n
//
MATCH(n)
DELETE n

删除节点间关系,该节点所有的关系,标签的所有关系,删除所有

MATCH(:Stock{name:'安琪酵母'})-[r]->(:Province{name:'湖北'})DELETE r
\\
MATCH(:Stock{name:'安琪酵母'})-[r]->()DELETE r
\\
MATCH(:Stock)-[r]->()DELETE r
\\
MATCH(n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r

更新

  • 增加节点属性MATCH(a:Stock)WHERE a.name='安琪酵母'SET a.abbreviation='AQJM'RETURN a
  • 删除节点属性MATCH(a:Stock)WHERE a.name='安琪酵母'REMOVE a.abbreviation

导入文件
导入CSV文件(如果包含中文需要使用UTF-8编码),删除所有

LOAD CSV WITH HEADERS FROM 'file:///exchange.csv'AS line CREATE(:Exchange{name:line.name,chinesename:line.chinesename,id:line.id})
\\
LOAD CSV WITH HEADERS FROM 'file:///Stocks-exchange.csv'AS line MATCH(from:Stock{cocode:line.stock_code}),(to:Exchange{id:line.exchange_id})MERGE (from)-[r:交易所]->(to)

社区版下载与安装

网络配置

Neo4j支持三种网络协议(Protocol),分别是Bolt,HTTP和HTTPS,默认的连接器配置有三种,为了使用这三个端口,需要在Windows防火墙中创建Inbound Rules,允许通过端口7687,7474和7473访问本机。

计算机防火墙中,tcp连接有三次握手,请求连接,同意连接,建立连接。入站规则inbound和出站规则outbound针对请求连接、同意连接的网络包。
比如:A入站允许B,出站禁止B,那么A可以访问B而B不能访问A;A入站禁止B,出站允许B,那么A不能访问B而B可以访问A。

安全域与工作模式

安全域
安全域为UNtrust不信任区,DMZ隔离区,Trust信任区,Local本地,Management管理。依次安全性增加,安全优先级分别为5,50,85,100,100。
报文从低级别的安全区域向高级别的安全区域流动时为入方向(Inbound),报文从由高级别的安全区域向低级别的安全区域流动时为出方向(Outbound)。
入站出站
交换模式(两层模式)
交换模式
路由模式(三层模式)
路由模式
混合模式
混合模式

配置各个网络协议的监听地址和接口。配置

报错警告

  • 报错1:无法启动
    报错
    考虑是因为桌面端和社区版冲突,端口占用,打不开7474端口。
    停止数据库,关闭桌面端软件,重新启动community,成功。
  • 报错2:无法打开browser
    使用ip地址无法进入http://localhost:7474/,显示localhost拒绝连接。打开windows功能如下。
    勾选
    没有解决
    另一方法为进入community安装路径/conf/neo4j.conf,打开后在该位置取消注释,不同版本的代码不同。同时要保证地址为0.0.0.0,才可以被远程主机访问。
    因为设置默认的网络监听的IP地址,该默认地址用于设置三个网络协议(Bolt,HTTP和HTTPs)的监听地址,即设置网络协议的属性:listen_address地址。在默认情况下,Neo4j只允许本地主机(localhost)访问,要想通过网络远程访问Neo4j数据库,需要修改监听地址为 0.0.0.0,这样设置之后,就能允许远程主机的访问。
    修改位置
    修改,去掉注释

问题解决

  • 报错3:无法安装服务
Unmatched argument at index 0: 'install-service'
Did you mean: neo4j windows-service install or neo4j windows-service uninstall or neo4j windows-service?

解决方法在bin目录下运行 :
neo4j.bat windows-service install
提示安装成功后可以运行
新的安装命令

社区版基本使用

数据库管理

neo4j start
neo4j stop

启动

用户管理

使用bin文件夹下面的cypher-shell实现命令行启动
重要文件

启动

//添加用户
CALL dbms.security.createUser(username,password,requirePasswordChange)

数据库备份与恢复

//离线备份,停止neo4j数据之后
neo4j-admin dump --database=<database> --to=<destination-path>
//离线恢复
neo4j-admin load --from=<archive-path> --database=<database> --froce

使用过程中的报错与警告

This query builds a cartesian product between disconnected patterns.
If a part of a query contains multiple disconnected patterns,
this will build a cartesian product between all those parts.
This may produce a large amount of data and slow down query processing.
While occasionally intended, it may often be possible to reformulate the
query that avoids the use of this cross product, perhaps by adding a
relationship between the different parts or by using OPTIONAL MATCH
(identifier is: (q))

如果您MATCH两个不同的标签,而它们之间没有任何关系,那么您将收到此警告。原因是因为如果你这样做:

MATCH (a:Foo), (b:Bar)
Neo4j 的工作就是找到这两个节点的所有可能的组合。因此,对于 a 的第一个匹配,它将为 b 的每个匹配返回一行,对于 a 的第二个匹配,它将再次返回 a b 的每个匹配行,依此类推。因此,您将在结果中得到 (Foo 节点数) x (Bar 节点数) 总行数。随着数据库的增长,这对性能来说确实很糟糕。

使用Python调用

urllib & urllib2 & urllib3

urllib3官方文档
urllib3其他参考文档
对比urllib和urllib3
对比urllib和urllib2


  1. Neo4j数据库面向开发人员的工具,允许开发人员执行查询语句并可视化结果 ↩︎

  2. cypher shell 是neo4j出的一个终端,可以直接运行cypher命令,也可以执行cypher脚本,还可以通过其他终端以运行cypher-shell命令的方式,运行cypher命令 ↩︎

  3. Java DataBase Connectivity,即Java数据库连接API。简而言之,就是通过Java语言来操作数据库。 ↩︎

  4. ODBC是开放式数据库连接。ODBC也是一个API,充当客户端应用程序和服务器端数据库之间的接口 ↩︎

  5. Spring Data Neo4j ↩︎

  6. OGM 类似于 ORM,意为 Object Graph Mapping,这样可以实现一个对象和 Node 的关联 ↩︎

  • 13
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值