前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >neo4j图数据库

neo4j图数据库

原创
作者头像
@小森
发布2024-07-08 14:21:21
1412
发布2024-07-08 14:21:21
Neo4j
Neo4j

基本概念

  • 图数据库:图数据库是一类特殊的数据库,用于有效地管理图形数据模型,其中数据以节点、关系和属性的形式存储。Neo4j作为图数据库的代表,具有处理复杂关系和连接的能力。
  • 无模式:Neo4j是无模式的,这意味着它不需要在数据存储之前定义固定的数据结构。这使得Neo4j在处理动态和半结构化数据方面具有很高的灵活性。
  • neo4j实现了专业数据库级别的图数据模型的存储。与普通的图处理或内存级数据库不同,neo4j提供了完整的数据库特性,包括ACID事物的支持,集群支持,备份与故障转移等。这使其适合于企业级生产环境下的各种应用。

主要特点

  1. 高性能:Neo4j被设计成具有高性能的图数据库,其内部存储和查询引擎被优化,以便有效地处理大规模的图形数据。
  2. 灵活性:Neo4j的图数据库模型具有很高的灵活性,可以轻松地表示和处理复杂的关系。这种灵活性使得Neo4j非常适合那些需要处理动态和多层次关系的场景。
  3. ACID支持:Neo4j提供了ACID(原子性、一致性、隔离性、持久性)的事务支持,确保数据库操作的可靠性和一致性。
  4. Cypher查询语言:Neo4j使用一种叫做Cypher的查询语言,专门用于对图数据库执行查询。Cypher语言简洁而强大,可以轻松地表达与图有关的查询和操作。
neo4j图数据库概念
neo4j图数据库概念

节点

  • 节点是主要的数据元素,节点通过关系连接到其他节点,节点可以具有一个或多个属性, 节点有一个或多个标签,用于描述其在图表中的作用。

关系

  • 关系连接两个节点,关系是方向性的,关系可以有一个或多个属性。

属性

  • 属性是命名值,其中名称(或键)是字符串,属性可以被索引和约束,可以从多个属性创 建复合索引。

标签

  • 标签用于组节点到集,节点可以具有多个标签,对标签进行索引以加速在图中查找节点。

neo4j图数据库的安装

第一步:将neo4j安装信息载入到yum检索列表

代码语言:txt
复制
sudo rpm --import https://debian.neo4j.com/neotechnology.gpg.key
sudo yum-config-manager --add-repo https://yum.neo4j.com/stable

第二步:使用yum install命令安装

代码语言:txt
复制
yum install neo4j

第三步:修改配置文件默认在/etc/neo4j/neo4j.conf

代码语言:txt
复制
dbms.directories.data=/var/lib/neo4j/data
dbms.directories.plugins=/var/lib/neo4j/plugins
dbms.directories.certificates=/var/lib/neo4j/certificates
dbms.directories.logs=/var/log/neo4j
dbms.directories.lib=/usr/share/neo4j/lib
dbms.directories.run=/var/run/neo4j


dbms.directories.import=/var/lib/neo4j/import


dbms.memory.heap.initial_size=512m 

dbms.connectors.default_listen_address=0.0.0.0

dbms.connector.http.enabled=true
dbms.connector.http.listen_address=:7474 

dbms.connector.https.enabled=true
dbms.connector.https.listen_address=:7473 

dbms.connector.bolt.enabled=true
dbms.connector.bolt.listen_address=:7687 

第四步:启动neo4j数据库

代码语言:txt
复制
# 启动命令
neo4j start

其中:GPG(GNU Privacy Guard)是一种加密软件,用于加密通信和验证软件包的完整性和来源。在Linux系统中,软件包管理器(如yum或dnf)会使用GPG密钥来验证下载的软件包是否来自可信的源,并且没有被篡改。

或者可以将neo4j服务放置在supervisor控制:

代码语言:txt
复制
先运行:chown -R neo4j:neo4j /var/lib/neo4j

然后去supervisord.conf中添加:

代码语言:txt
复制
[program:neo4j]
command=neo4j console
user=neo4j
autostart=true
autorestart=unexpected
startsecs=30
startretries=999
priorities=90
exitcodes=0,1,2
stopsignal=SIGTERM
stopasgroup=true
killasgroup=true
redirect_stderr=true
stdout_logfile=/var/log/neo4j.out
stdout_logfile_backups=10
stderr_capture_maxbytes=20MB

如果是在云服务器上,那么现在就可以使用http://(主机公网IP):7474 来访问neo4j的浏览器界面~

注意:云服务器上一定用到什么端口就去开哪个端口,否则访问不成功!

Cypher使用

create命令

创建图数据中的节点

代码语言:txt
复制
CREATE (e:Employee{id:222, name:'Bob', salary:6000, deptnp:12})

match命令

匹配(查询)已有数据

代码语言:txt
复制
MATCH (e:Employee) RETURN e.id, e.name, e.salary, e.deptno

MATCH (n) return n # 查询所有结点

merge命令

若节点存在,则等效与match命令; 节点不存在,则等效于create命令。

代码语言:txt
复制
MERGE (e:Employee {id:146, name:'Lucer', salary:3500, deptno:16})

使用create创建关系

必须创建有方向性的关系,否则报错。

代码语言:txt
复制
CREATE (p1:Profile1)-[r:Buy]->(p2:Profile2)   # p1购买了p2

使用merge创建关系

可以创建有/无方向性的关系。

代码语言:txt
复制
MERGE (p1:Profile1)-[r:miss]-(p2:Profile2)

where命令

类似于SQL中的添加查询条件。

代码语言:txt
复制
MATCH (e:Employee) WHERE e.id=123 RETURN e

delete命令

删除节点/关系及其关联的属性。

代码语言:txt
复制
MATCH (p1:Profile1)-[r]-(p2:Profile2) DELETE p1, r, p2

sort命令

Cypher命令中的排序使用的是order by

代码语言:txt
复制
MATCH (e:Employee) RETURN e.id, e.name, e.salary, e.deptno ORDER BY e.id

# 如果要按照降序排序,只需要将ORDER BY e.salary改写为ORDER BY e.salary DESC
MATCH (e:Employee) RETURN e.id, e.name, e.salary, e.deptno ORDER BY e.salary DESC

在Python中使用neo4j

  • neo4j-driver是一个python中的package, 作为python中neo4j的驱动,帮助我们在python程序中更好的使用图数据库。
代码语言:txt
复制
pip install neo4j-driver

连接到Neo4j数据库

需要使用驱动程序连接到Neo4j数据库。我们需要提供数据库的URI、用户名和密码。

代码语言:txt
复制
from neo4j import GraphDatabase  
  
uri = "bolt://localhost:7687"  # Neo4j数据库的Bolt协议URI  
user = "neo4j"                 # 你的Neo4j用户名  
password = "your_password"     # 你的Neo4j密码  
  
driver = GraphDatabase.driver(uri, auth=(user, password))

执行Cypher查询

有了driver对象,就可以使用它来创建会话(session),并在会话中执行Cypher查询。

代码语言:txt
复制
def create_person(tx, name, age):  
    tx.run("CREATE (a:Person {name: $name, age: $age})", name=name, age=age)  
  
def read_person(tx, name):  
    result = tx.run("MATCH (a:Person) WHERE a.name = $name RETURN a.name, a.age", name=name)  
    for record in result:  
        print(record["a.name"], record["a.age"])  
  
with driver.session() as session:  
    # 创建一个Person节点  
    session.write_transaction(create_person, "Alice", 30)  
      
    # 读取并打印名为Alice的Person节点的信息  
    session.read_transaction(read_person, "Alice")  
  
# 关闭驱动程序连接(可选,通常会在程序结束时自动关闭)  
driver.close()

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本概念
  • 主要特点
  • neo4j图数据库的安装
  • Cypher使用
    • create命令
      • match命令
        • merge命令
          • 使用create创建关系
            • 使用merge创建关系
              • where命令
                • delete命令
                  • sort命令
                  • 在Python中使用neo4j
                    • 连接到Neo4j数据库
                      • 执行Cypher查询
                      相关产品与服务
                      数据库
                      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档