编程学习网 > 编程语言 > Python > 图数据库neo4j 以及python中如何使用教程
2023
11-10

图数据库neo4j 以及python中如何使用教程


首先neo4j是最为流行的数据库

现在有一个需求,不论你是使用关系型数据库还是nosql,要记录下来数据之间的关联关系,并随时将这种关联的数据查询出来,不管嵌套了多少层,形如下

如果我们使用关系型数据库需要记录parent_id等等,然后递归,层层递归查询数据,随着数据量的激增,查询速度每况愈下。nosql也不能很好的解决这个问题。此时图数据库应运而生,现在图数据库普遍应用于Facebook,银行等系统中。
Neo4j的特点
SQL就像简单的查询语言Neo4j CQL
它遵循属性图数据模型
它通过使用Apache Lucence支持索引
它支持UNIQUE约束
它包含一个用于执行CQL命令的UI:Neo4j数据浏览器
它支持完整的ACID(原子性,一致性,隔离性和持久性)规则
它采用原生图形库与本地GPE(图形处理引擎)
它支持查询的数据导出到JSON和XLS格式
它提供了REST API,可以被任何编程语言(如Java,Spring,Scala等)访问
它提供了可以通过任何UI MVC框架(如Node JS)访问的Java脚本
它支持两种Java API:Cypher API和Native Java API来开发Java应用程序
Neo4j的优点
它很容易表示连接的数据
检索/遍历/导航更多的连接数据是非常容易和快速的
它非常容易地表示半结构化数据
Neo4j CQL查询语言命令是人性化的可读格式,非常容易学习
使用简单而强大的数据模型
它不需要复杂的连接来检索连接的/相关的数据,因为它很容易检索它的相邻节点或关系细节没有连接或索引
Neo4j - 数据模型
表示节点,关系和属性中的数据
节点和关系都包含属性
关系连接节点
属性是键值对
节点用圆圈表示,关系用方向键表示。
关系具有方向:单向和双向。
每个关系包含“开始节点”或“从节点”和“到节点”或“结束节点”
在图数据库中关系是定向的,双向或者单向
关于neo4j cql请查看官网,包括创建,查询,where,聚合,union等等
关于如何部署neo4j请查看官网(window或者docker或者k8s,注意Windows安装最新版本的neo4j需要本机安装jvm 1.11)
本文以k8s中部署的3.5.12 为例
1. 创建数据节点
create (node:Node{ID:1,Type:"SAP"}
create (node:Node{ID:2,Type:"H1"}
create (node:Node{ID:3,Type:"H2"}
create (node:Node{ID:4,Type:"H3"}
create (node:Node{ID:5,Type:"H4"}
create (node:Node{ID:6,Type:"H5"}
2.  建立单向关联
MATCH(n1:Node) where n1.Type='SAP'
MATCH(n2:Node) where n2.Type in ['H1','H2']
create (n1) -[r:relation] ->(n2) return r
MATCH(n1:Node) where n1.Type='H1'
MATCH(n2:Node) where n2.Type='H3'
create (n1) -[r:relation] ->(n2) return r
MATCH(n1:Node) where n1.Type='H2'
MATCH(n2:Node) where n2.Type in ['H4','H5']
create (n1) -[r:relation] ->(n2) return r
MATCH(n1:Node) where n1.Type='H5'
MATCH(n2:Node) where n2.Type='SAP'
create (n1) -[r:relation] ->(n2) return r
3. 查询标签为relation的所有节点
match(c)-[r:relation]->(vc) return c,vc
查询结果如下,一条命令将所有节点查询出来

4. python client
from neo4j import GraphDatabase
class HelloWorldExample():
    def __init__(self, uri, user, password):
        self.driver = GraphDatabase.driver(uri, auth=(user, password))
    def close(self):
        self.driver.close()
    @staticmethod
    def get_relation(tx,ID=None):
        if ID:
            result = tx.run("MATCH(n1:Node{ID: $ID}) -[r: relation]->(c) return c",ID=ID)
        else:
            result = tx.run("MATCH(n1)-[r: relation] ->(c) return n1,c")
                return [value[0]._properties for value in result.values()]
        def print_relation(self, ID=None):
        with self.driver.session() as session:
            greeting = session.execute_write(self.get_relation, ID)
            print(greeting)
if __name__ == "__main__":
    greeter = HelloWorldExample("bolt://192.168.214.133:30687", "neo4j", "ellis")
    greeter.print_relation(3)

    greeter.close()

以上就是图数据库neo4j 以及python中如何使用教程的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取