我们先来整理一下学习思路,不管学什么技术 我们都按照如下思路学习 那 你就会发现 学什么都会事半功倍。
(1) 图数据库是什么?
关注我不迷路这期先不说,保留神秘感。
(2)为什么要使用?
(3)解决了什么问题?
(4) 使用中遇到的问题?
(5) 如何解决以及同类型的产品?
带着如上这些问题 ,我们来学习,首先不管是什么 ,我们先安装一个 neo4j数据库实例 来练习
开始 =======================================>>
微云数据主页提供的ftp下载(国内):
http://we-yun.com/index.php/blog/releases-56.html
微云数据主页提供的包的下载(国内):
ftp://neo4j.55555.io/neo4j/3.5.6/
neo4j 安装包的路径:
https://neo4j.com/download-center/#releases
cd /tmp
wget http://debian.neo4j.org/neotechnology.gpg.key
sudo rpm --import neotechnology.gpg.key
然后创建 /etc/yum.repos.d/neo4j.repo 文件:
touch /etc/yum.repos.d/neo4j.repo
执行:
cat < /etc/yum.repos.d/neo4j.repo [neo4j] name=Neo4j Yum Repo baseurl=http://yum.neo4j.org/stable enabled=1 gpgcheck=1 EOF
最后
yum install neo4j
然后进入 /etc/neo4j 目录修改 neo4j.conf文件 修改访问ip为0.0.0.0
然后我们导航到/usr/share/neo4j/bin 运行目录下,运行:neo4j start命令就可以启动neo4j数据库了。
默认密码 :neo4j/neo4j
结束 =======================================>>
好了 现在我们的图数据库已经安装成功了,那么接下来我们就是写做一个例子了
http://IP:7474/browser/ 这个地址一般是你的数据库的访问地址 IP 是你安装图数据库服务的IP地址。
如图:
看到这个图证明你的数据库已经成功访问了,我们可以执行第一个代码.
match (n) return n limit 10
这句cypher 的意思就是查询节点 返回该节点 返回数量做一个限制 10 个结果集,这是查询那么我们飞速来一个创建吧,
CREATE (c:TESTWiFi{name:'张三家的wifi'})
CREATE 关键字 创建 c 可以看作是一个节点的引用 TESTWiFi 是一个标签,{}用这个括号括起来的里面都是属性,这个标签的属性,很明显 TESTWiFi 有一个name属性。整合起来就是我们创建了一个标签是TESTWiFi 的wifi数据
如果我们想要更新 就使用
MERGE (c:TESTWiFi) set c.name='张三家的wifi1'
MERGE 是关键字 他的意思就是先查询 后创建,查询到了 就拿到 不创建,查询不到 就创建,MERGE (c:TESTWiFi) 就是拿到所有标签是 TESTWiFi的数据 使用set把 name属性值改为张三家的wifi1 ,如果想要操作某一个怎么办呢,如下
MERGE (c:TESTWiFi{name:'张三家的wifi1'}) set c.name='蛋蛋家的wifi1'
查到一个就修改这个数据的名称就行
接下来我们说删除
MATCH (n:TESTWiFi) delete n
delete 关键字 删除节点 或者关系 当然如果想删除某一个 那需要详细 查询出来 如merge 语法 查询出来 再delete
讲到关系 ,那我们就创建一个关系 ,关系 这里 简单粗暴的理解就是 ,万物互联 互有关系,我们只是把抽象的东西 具体化了。如
merge (n:TESTWiFi{name:'李四家的wifi'})-[:共用wifi密码]-(n1:TESTWiFi{name:'张三家的wifi'})
我们使用merge 创建两个节点 然后给这两个节点创建一个关系
我们创建也可以使用 caeate 创建例如 我们再单独创建两个节点
create (n:TESTWiFi{name:'李奶奶家的wifi'})create (n:TESTWiFi{name:'小红家的wifi'})create (n:TESTWiFi{name:'小黑家的wifi'})
创建完成
MATCH (t1:TESTWiFi{name:'小红家的wifi'}), (t2:TESTWiFi{name:'小黑家的wifi'}), (t3:TESTWiFi{name:'李奶奶家的wifi'}) with t1,t2,t3 create (t1)-[:蹭网]->(t2)<-[:蹭网]-(t3)
通过执行上述代码 可见,我们是先查询 后完成创建的,而我们使用merge的时候没有节点 直接完成查询到创建的过程 ,即使你存在节点但是没有存在关系,那么它就是认为 节点也不存在,这也是一个很致命的问题。需要特别注意哦。merge 就是先查询后创建, merge后面跟 (n:TESTWiFi{name:'李四家的wifi'})-[:共用wifi密码]-(n1:TESTWiFi{name:'张三家的wifi'}) 这样的 相当于是一个整体 ,程序查询的是这个整体 而不是 单独一个点。
我们来删除这些数据吧,使用一个新的方式
DETACH DELETE 这两个关键字是连起来一起使用的,意思呢就是 :允许你删除一个节点的同时删除与其相连的所有关系。
MATCH (n:TESTWiFi) detach delete n
好了 学到这里 我们已经完成了图谱的CURD了 划重点
1 create 的使用2 merge 的使用3 delete 的使用4 detach delete 的使用5 match 的简单使用6 merge与create的区别
图数据库是什么?如上练习,关系数据库对于多对多关系建模并不是那么合适。而反过来,Neo4j则擅长多对多关系的处理 为什么这么说呢,
图遍历是通过在互相连接的两个节点之间移动来访问图中的一组节点的操作。这是图数据库中进行数据检索的基本操作。遍历的一个关键概念是这个操作仅仅是局部相关的, 遍历查询时只需要考虑所需的数据,无需像关系型数据库的join一样,在整个数据集上执行代价极高的分组操作
关系型数据库 可以非常好地处理深度为2和3的查询。join操作在关系型数据库世界中很常见,大多数数据库都是如此设计,在某些特定列上使用索引相关也能帮助最大化join操作的性能。然而,当深度达到4和5时,您会看到性能显着下降:一个涉及4个join的查询需要10秒以上才能完成,而在深度为5时更花了太长时间,超过一分半钟
由此可见 我们使用图数据进行关系深度检索 关系建模 ,神经网络搭建是非常高效的。当然图数据库的用处不仅仅如此。