Neo4j的部署和操作

news2025/1/7 22:05:29

注:本博文展示部署哥操作步骤和命令,具体报告及运行截图可通过上方免费资源绑定下载

一.数据库的部署与配置

在单个节点上对进行数据库的单机部署

(1)上传neo4j-community-3.5.30-unix.tar.gz到hadoop1的/export/software目录

(2)解压缩neo4j:$ tar -xzf /export/software/neo4j-community-3.5.30-unix.tar.gz -C /export/servers/

(3)进入Neo4j解压缩目录,修改conf目录下的配置文件neo4j.conf

·cd /export/servers/neo4j-community-3.5.30

·vi conf/neo4j.conf

修改内容如下:

(4)启动Neo4j数据库:bin/neo4j start

(5)停止Neo4j数据库:bin/neo4j stop

(6)重启Neo4j数据库:bin/neo4j restart

  1. 查看Neo4j数据库的状态:bin/neo4j status

(8)使用web访问http://hadoop1:7474, 默认用户名和密码均为“neo4j”

(9)在输入框中输入指令可以显示教程:play start

二.使用命令访问数据库

1.节点和关系的创建:创建节点(包括属性)、创建关系、创建唯一节点。

(1)创建节点:创建三个Person节点,分别代表 Alice、Bob 和 Charlie,每个节点都有name和age属性。

·CREATE (a:Person {name: 'Alice', age: 28})

·CREATE (b:Person {name: 'Bob', age: 32})

·CREATE (c:Person {name: 'Charlie', age: 25})

  1. 创建关系:使用MATCH找到指定的节点(Alice, Bob, Charlie),然后使用CREATE创建关系KNOWS,表示他们之间相互认识。

// Alice 认识 Bob

·MATCH (a:Person {name: 'Alice'}), (b:Person {name: 'Bob'})

·CREATE (a)-[:KNOWS]->(b)

// Bob 认识 Charlie

·MATCH (b:Person {name: 'Bob'}), (c:Person {name: 'Charlie'})

·CREATE (b)-[:KNOWS]->(c)

(3)创建唯一节点:确保只有一个名为 'Charlie' 的节点存在

·MERGE (d:Person {name: 'Charlie'})

2.节点和关系的查询:查询节点、条件查询、查询关系

(1)查询节点:查询所有Person节点并查看它们的name和age属性。

·MATCH (n:Person)

·RETURN n.name, n.age

  1. 条件查询:查询年龄大于30的用户,并返回他们的name和age。

·MATCH (n:Person)

·WHERE n.age > 30

·RETURN n.name, n.age

  1. 查询关系:查询所有的KNOWS关系,并返回两个节点(a和b)以及它们之间的关系(r)

·MATCH (a:Person)-[r:KNOWS]->(b:Person)

·RETURN a.name, b.name, r

3.更新标签或属性:更新属性、更新标签

(1)更新属性:更新name为'Alice'的Person节点的age属性为30

·MATCH (n:Person {name: 'Alice'})

·SET n.age = 30

(2)更新标签:给name为'Alice'的Person节点添加了一个新的标签Employee,表示她同时是Employee类型的节点。

·MATCH (n:Person {name: 'Alice'})

·SET n:Employee

上述操作更新后的节点表如下:

4.删除节点和关系:删除属性、删除节点、删除关系、删除所有的节点和关系

(1)删除属性:删除name为'Alice'的Person节点的age属性。

·MATCH (n:Person {name: 'Alice'})

·REMOVE n.age

(2)删除节点:删除name为'Bob'的Person节点

·MATCH (n:Person {name: 'Bob'})

·DETACH DELETE n

  1. 删除关系:删除名为 Alice 和 Bob 之间的 KNOWS 关系

·MATCH (a:Person {name: 'Alice'})-[r:KNOWS]->(b:Person {name: 'Bob'})

·DELETE r

(4)删除所有的节点和关系:

·MATCH (n)

·DETACH DELETE n

三.数据库的设计

图书管理系统包含两个主要实体:图书和读者。它们之间通过一个关系来进行联系,借阅记录表示图书与读者之间的借阅关系,本系统共设计两个节点标签,分别是图书(存储图书的相关信息)和读者(存储读者的基本信息),一个关系标签借阅关系(表示图书与读者之间的借阅关系)。

1.数据库设计

(1)图书节点标签

标签名称:Book

属性:

title:图书名称

category:图书类别,如文学、小说等

published_date:图书出版日期

author_name:作者名称

author_birth_date:作者出生日期

publisher_name:出版商名称

publisher_address:出版商地址

(2)读者节点标签

标签名称:Reader

属性:

name:读者姓名

dob:读者出生日期

email:电子邮件

phone_number:联系电话

address:住址

(3)借阅关系标签

标签名称:BORROWED

连接节点:Reader与Book

属性:

borrow_date:借阅日期

return_date:归还日期

(4)实体与关系的增删改查

①新增操作

新增图书:使用 CREATE 命令添加新的图书节点(Book)。图书节点包括图书的标题、类别、出版日期、作者信息、出版商等属性。

新增借阅记录:使用 CREATE 命令在图书与读者之间建立一个新的借阅关系(BORROWED)。该关系包含借阅日期、归还日期等属性,连接已存在的读者节点(Reader)和图书节点(Book)。

新增读者:使用 CREATE 命令添加新的读者节点(Reader)。读者节点包括读者的姓名、出生日期、联系信息(如电话、地址、电子邮件等)等属性。

②删除操作

删除图书:使用 DELETE 命令删除指定的图书节点(Book)。删除时需要先找到该图书节点,可以通过图书标题等属性进行匹配。

删除借阅记录:使用 DELETE 命令删除图书与读者之间的借阅关系(BORROWED)。通过匹配读者和图书的具体信息,删除它们之间的借阅关系。

删除读者:使用 DELETE 命令删除指定的读者节点(Reader)。删除时需要先找到该读者节点,并确认与该读者相关的借阅关系(如果有)是否也需要删除。

③更新操作

更新图书信息:使用 SET 命令更新图书节点的某些属性,如图书的标题、作者、出版商等信息。通过匹配图书的具体属性(如标题),更新节点中的内容。

更新借阅记录:使用 SET 命令更新借阅关系的属性,如借阅日期、归还日期等。通过匹配特定的读者和图书,更新相应的借阅记录。

更新读者信息:使用 SET 命令更新读者节点的某些属性,如读者的姓名、电子邮件、联系电话等。通过匹配读者的具体信息(如姓名),更新该节点的内容。

④查询操作

查询某本图书的详细信息:使用 MATCH 命令查询图书节点的相关信息。可以根据图书的标题、作者或其他属性来查询图书的详细信息。

查询某本图书的借阅记录:使用 MATCH 命令查询所有借阅特定图书的记录。可以通过图书的标题或ID,找到借阅该图书的所有读者,以及借阅的日期和归还日期等信息。

查询某位读者的借阅记录:使用 MATCH 命令查询特定读者的所有借阅记录。通过读者的姓名或ID,查询该读者借阅的所有图书,并返回图书的详细信息(如标题、作者等)。

查询某位读者的详细信息:使用 MATCH 命令查询读者的详细信息。可以根据读者的姓名或ID,返回该读者的姓名、出生日期、联系方式等信息。

2.图设计与填充数据

(1)图书节点数据填充

CREATE (b1:Book {

  title: '活着',

  category: '文学',

  published_date: '1993-06-01',

  author_name: '余华',

  author_birth_date: '1960-04-03',

  publisher_name: '作家出版社',

  publisher_address: '北京市朝阳区'

})

CREATE (b2:Book {

  title: '百年孤独',

  category: '小说',

  published_date: '1967-06-05',

  author_name: '加西亚·马尔克斯',

  author_birth_date: '1927-03-06',

  publisher_name: '南海出版公司',

  publisher_address: '上海市徐汇区'

})

(2)读者节点数据填充

CREATE (r1:Reader {

  name: '张三',

  dob: '1990-05-15',

  email: 'zhsan@email.com',

  phone_number: '123-4567-8901',

  address: '北京市海淀区'

})

CREATE (r2:Reader {

  name: '李四',

  dob: '2005-02-28',

  email: 'lisi@email.com',

  phone_number: '987-6543-2100',

  address: '上海市浦东新区'

})

(3)借阅关系节点数据填充

MATCH (r:Reader {name: '张三'}), (b:Book {title: '活着'})

CREATE (r)-[:BORROWED {borrow_date: '2024-11-01', return_date: '2024-11-15'}]->(b)

MATCH (r:Reader {name: '李四'}), (b:Book {title: '百年孤独'})

CREATE (r)-[:BORROWED {borrow_date: '2024-11-02', return_date: '2024-11-20'}]->(b)

四.编程实现数据库的访问

使用Python访问实现设计的图书管理系统的Neo4j数据库,步骤如下:

(1)在Python中连接到Neo4j数据库:

import neo4j

# 数据库连接
uri = "neo4j://localhost:7687"  # Neo4j默认连接端口
username = "neo4j"
password = "neo4j"

driver = neo4j.GraphDatabase.driver(uri, auth=(username, password))

(2)图书管理系统包含以下节点类型和关系:

Book:图书节点,包含书名、作者、出版日期等属性。

Reader:读者节点,包含姓名、联系方式等属性。

BORROWED:借阅关系,表示图书与读者之间的借阅关系,包含借阅日期和归还日期。

创建这些节点的函数:

def create_book(tx, title, category, published_date, author_name, author_birth_date, publisher_name, publisher_address):

    query = (

        "CREATE (b:Book {title: $title, category: $category, published_date: $published_date, "

        "author_name: $author_name, author_birth_date: $author_birth_date, "

        "publisher_name: $publisher_name, publisher_address: $publisher_address})"

    )

    tx.run(query, title=title, category=category, published_date=published_date,

           author_name=author_name, author_birth_date=author_birth_date,

           publisher_name=publisher_name, publisher_address=publisher_address)

def create_reader(tx, name, dob, email, phone_number, address):

    query = (

        "CREATE (r:Reader {name: $name, dob: $dob, email: $email, "

        "phone_number: $phone_number, address: $address})"

    )

tx.run(query, name=name, dob=dob, email=email, phone_number=phone_number, address=address)

(3)插入图书和读者:

def insert_data():

    with driver.session() as session:

        # 新增图书

        session.write_transaction(create_book, "活着", "文学", "1993-06-01", "余华", "1960-04-03", "作家出版社", "北京市朝阳区")

        session.write_transaction(create_book, "百年孤独", "小说", "1967-06-05", "加西亚·马尔克斯", "1927-03-06", "南海出版公司", "上海市徐汇区")

        # 新增读者

        session.write_transaction(create_reader, "张三", "1990-05-15", "zhsan@email.com", "123-4567-8901", "北京市海淀区")

        session.write_transaction(create_reader, "李四", "2005-02-28", "lisi@email.com", "987-6543-2100", "上海市浦东新区")

(4)查询所有图书及其属性:

def get_all_books(tx):

    query = "MATCH (b:Book) RETURN b.title AS title, b.author_name AS author, b.published_date AS published_date"

    result = tx.run(query)

    for record in result:

        print(f"Title: {record['title']}, Author: {record['author']}, Published Date: {record['published_date']}")

(5)更新图书的出版日期:

def update_book(tx, title, new_publish_date):

    query = "MATCH (b:Book {title: $title}) SET b.published_date = $new_publish_date"

tx.run(query, title=title, new_publish_date=new_publish_date)

更新《活着》:session.write_transaction(update_book, "活着", "1993-07-01")

(6)删除某本图书和读者节点:

def delete_book(tx, title):

    query = "MATCH (b:Book {title: $title}) DELETE b"

    tx.run(query, title=title)

def delete_reader(tx, name):

    query = "MATCH (r:Reader {name: $name}) DELETE r"

tx.run(query, name=name)

(7)建立图书与读者之间的借阅关系:

def create_borrowed_relationship(tx, book_title, reader_name, borrow_date, return_date):

    query = (

        "MATCH (b:Book {title: $book_title}), (r:Reader {name: $reader_name}) "

        "CREATE (r)-[:BORROWED {borrow_date: $borrow_date, return_date: $return_date}]->(b)"

    )

    tx.run(query, book_title=book_title, reader_name=reader_name, borrow_date=borrow_date, return_date=return_date)

建立张三与《活着》之间的关系:session.write_transaction(create_borrowed_relationship, "活着", "张三", "2024-11-01", "2024-11-15")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2272866.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Anaconda安装(2024最新版)

安装新的anaconda需要卸载干净上一个版本的anaconda,不然可能会在新版本安装过程或者后续使用过程中出错,完全卸载干净anaconda的方法,可以参考我的博客! 第一步:下载anaconda安装包 官网:Anaconda | The O…

docker中使用Volume完成数据共享

情景概述 在一个docker中,部署两个MySQL容器,假如它们的数据都存储在自己容器内部的data目录中。这样的存储方式会有以下问题: 1.无法保证两个MySQL容器中的数据同步。 2.容器删除后,数据就会丢失。 基于以上问题,容…

Mac软件介绍之录屏软件Filmage Screen

软件介绍 Filmage Screen 是一款专业的视频录制和编辑软件,适用于 Mac 系统 可以选择4k 60fps,可以选择录制电脑屏幕,摄像头录制,可以选择区域录制。同时也支持,简单的视频剪辑。 可以同时录制电脑麦克风声音 标准…

【Redis经典面试题七】Redis的事务机制是怎样的?

目录 一、Redis的事务机制 二、什么是Redis的Pipeline?和事务有什么区别? 三、Redis的事务和Lua之间有哪些区别? 3.1 原子性保证 3.2 交互次数 3.3 前后依赖 3.4 流程编排 四、为什么Lua脚本可以保证原子性? 五、为什么R…

【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】

目录😋 任务描述 相关知识 1. 相关排序和查找算法的原理 2. C 类与成员函数的定义 3. 数组作为类的成员变量的处理 4. 函数参数传递与返回值处理 编程要求 测试说明 通关代码 测试结果 任务描述 本关任务: 将直接插入排序、直接选择排序、冒泡…

[开源]自动化定位建图系统

系统状态机: 效果展示: 1、 机器人建图定位系统-基础重定位,定位功能演示 2、 机器人建图定位系统-增量地图构建,手动回环检测演示 3、敬请期待… 开源链接: 1、多传感器融合里程计 https://gitee.com/li-wenhao-lw…

简单的jmeter数据请求学习

简单的jmeter数据请求学习 1.需求 我们的流程服务由原来的workflow-server调用wfms进行了优化,将wfms服务操作并入了workflow-server中,去除了原来的webservice服务调用形式,增加了并发处理,现在想测试模拟一下,在一…

conda/pip基本常用命令理解与整理

最近配置了两轮pytorch环境,由于要频繁用到各种conda和pip命令,所以再此整理一下。 文章目录 前言:conda虚拟环境总结与解读Conda和pip的理解区别和联系命令格式 conda环境命令查看创建和删除导出与导入激活和退出 包管理命令安装和删除文件批…

Maven 详细配置:Maven settings 配置文件的详细说明

Maven settings 配置文件是 Maven 环境的重要组成部分,它用于定义用户特定的配置信息和全局设置,例如本地仓库路径、远程仓库镜像、代理服务器以及认证信息等。settings 文件分为全局配置文件(settings.xml)和用户配置文件&#x…

Unity-Mirror网络框架-从入门到精通之Chat示例

文章目录 前言Chat聊天室Authentication授权ChatAuthenticatorChat示例中的授权流程聊天Chat最后 前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。Mirror是一个用于Unity的开源网络框架,专为多人游戏开发设计。它使得开发者能够轻…

复杂园区网基本分支的构建

目录 1、各主机进行网络配置。2、交换机配置。3、配置路由交换,进行测试。4、配置路由器接口和静态路由,进行测试。5、最后测试任意两台主机通信情况 模拟环境链接 拓扑结构 说明: VLAN标签在上面的一定是GigabitEthernet接口的&#xff0c…

这是什么操作?强制迁移?GitLab 停止中国区用户访问

大家好,我是鸭鸭! 全球知名代码托管平台 GitLab 发布通告,宣布不再为位于中国大陆、香港及澳门地区的用户提供访问服务,并且“贴心”建议,可以访问极狐 GitLab。 极狐 GitLab 是一家中外合资公司,宣称获得…

CDP集成Hudi实战-spark shell

[〇]关于本文 本文主要解释spark shell操作Hudi表的案例 软件版本Hudi1.0.0Hadoop Version3.1.1.7.3.1.0-197Hive Version3.1.3000.7.3.1.0-197Spark Version3.4.1.7.3.1.0-197CDP7.3.1 [一]使用Spark-shell 1-配置hudi Jar包 [rootcdp73-1 ~]# for i in $(seq 1 6); do s…

设计模式学习[15]---适配器模式

文章目录 前言1.引例2.适配器模式2.1 对象适配器2.2 类适配器 总结 前言 这个模式其实在日常生活中有点常见,比如我们的手机取消了 3.5 m m 3.5mm 3.5mm的接口,只留下了一个 T y p e − C Type-C Type−C的接口,但是我现在有一个 3.5 m m 3.…

数据挖掘——数据预处理

数据挖掘——数据预处理 数据预处理数据预处理 ——主要任务数据清洗如何处理丢失的数据如何处理噪声数据如何处理不一致数据 数据集成相关分析相关系数(也成为皮尔逊相关系数)协方差 数据规约降维法:PCA主成分分析降数据——抽样法数据压缩 数据预处理 数据预处理…

Unity-Mirror网络框架-从入门到精通之CCU示例

文章目录 前言什么是CCU?测试结果最后 前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。Mirror是一个用于Unity的开源网络框架,专为多人游戏开发设计。它使得开发者能够轻松实现网络连接、数据同步和游戏状态管理。本文…

如何在 Ubuntu 22.04 上安装 Nagios 服务器教程

简介 在本教程中,我们将解释如何在 Ubuntu 22.04 上安装和配置 Nagios,使用 Apache 作为 Web 服务器,并通过 Let’s Encrypt Certbot 使用 SSL 证书进行保护。 Nagios 是一个强大的监控系统,它可以帮助组织在 IT 基础设施问题影…

大语言模型训练所需的最低显存,联邦大语言模型训练的传输优化技术

联邦大语言模型训练的传输优化技术 目录 联邦大语言模型训练的传输优化技术大语言模型训练所需的最低显存大语言模型训练所需的最低显存 基于模型微调、压缩和分布式并行处理的方法,介绍了相关开源模型及技术应用 核心创新点 多维度优化策略:综合运用基于模型微调、模型压缩和…

Javascript算法——贪心算法(一)

贪心算法详解(JavaScript)(局部最优->全局最优) 贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前状态下的最优选择(局部最优)的算法设计方法。通过局部最优解的累积&…

141.《mac m系列芯片安装mongodb详细教程》

文章目录 下载从官网下载安装包 下载后双击解压出文件夹安装文件名修改为 mongodb配置data存放位置和日志log的存放位置启动方式一方式二方式二:输入mongo报错以及解决办法 本人电脑 m2 pro,属于 arm 架构 下载 官网地址: mongodb官网 怎么查看自己电脑应该下载哪个版本,输入…