Neo4j的部署和操作

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

一.数据库的部署与配置

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

(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")

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

虚拟机 网络防御(预防信息泄露)

了解VMware网络基本配置 Bridged(桥接模式):虚拟机和主机好比在同一个网络环境下的两台电脑。 NAT(网络地址转换模式):NAT模式虚拟机通过主机进行联网。(推荐) Host-0nly(主机模式):主机模式将虚拟机与外网隔开,只能让虚拟机和虚拟机之间联…

打包部署若依(RuoYi)SpringBoot后端和Vue前端图文教程

打包后端‘ 1,打开若依,点击右侧的Maven展开Maven管理,选择ruoyi>Lifecycle 先双击clean清除原本启动项目时生成的文件。然后点击package等待项目打包,切记要取消运行再打包 打包完成后会在ruoyi-admin>src>target里面…

矩阵碰一碰发视频源码搭建全解析,支持OEM

在数字化营销与互动体验需求日益增长的当下,矩阵碰一碰发视频功能以其独特的交互性和高效的信息传播能力,正逐渐成为吸引用户、提升品牌影响力的有力工具。本文将深入探讨如何搭建矩阵碰一碰发视频的源码,帮助开发者实现这一创新功能。 一、技…

专题十四——BFS

目录 一BFS解决FloodFill算法 1图像渲染 2岛屿数量 3岛屿的最大面积 4被环绕的区域 二BFS解决蛋源最短路径问题 1迷宫中离入口最近的出口 2最小基因变化 3单词接龙 4为高尔夫比赛砍树 三BFS解决多源最短路径问题 1 01矩阵 2飞地的数量 3地图中的最高点 4地图分…

openwrt 清缓存命令行

一、查看缓存 : free -m 二、清缓存:echo 3 > /proc/sys/vm/drop_caches  三、详解。 释放物理页缓存 echo 1 > /proc/sys/vm/drop_caches 释放可回收的slab对象,包含inode and dentry echo 2 > /proc/sys/vm/drop_caches 同时…

huggingface 下载方法 测试ok

目录 python下载方法: 设置环境变量 ~/.bashrc 缓存目录,默认模型下载目录 安装方法: python 下载无token: python 下载带token 常见报错 登录后创建Read token 2.3 创建token 使用token登录 python下载方法&#xff1…

滑动窗口_⻓度最⼩的⼦数组⽆重复字符的最⻓⼦串将x减到0的最⼩操作数

⻓度最⼩的⼦数组&#xff08;medium https://leetcode.cn/problems/minimum-size-subarray-sum/ 思路一&#xff1a;两个指针&#xff0c;p1 p2同时指向第一个元素。sump2,如果sum<target&#xff0c;p2直到大于&#xff0c;然后记录lenright-left。p1 p2再同时指向第二个…

【无标题】linux

Linux工具快速教程 Linux 基础 Linux工具快速教程1、使用命令帮助1.1 查看命令的简要说明1.2 查看路径 2. 文件及目录2.1 创建和删除2.2 切换目录2.3 列出目录项2.4 查找文件或目录 find2.5 查看文件内容2.6 查找文件内容 好用小工具linux工具电源统计1. 查询公网IPhttp://www.…

HarmonyOS-面试资料

1. HarmonyOS-面试资料 1.1. HarmonyOS 优点、特点 1.1.1. 优点 &#xff08;1&#xff09;在国家方面&#xff0c;是国产的系统&#xff0c;受国家支持不会有限制的情况。   &#xff08;2&#xff09;设备互连18N(1:手机 8&#xff1a;平板、PC、vr设备、可穿戴设备、智慧…

关于物联网的基础知识(一)

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于物联网的基础知识&#xff08;一&a…

基于Thinkphp6+uniapp的陪玩陪聊软件开发方案分析

使用uni-app框架进行前端开发。uni-app是一个使用Vue.js开发所有前端应用的框架&#xff0c;支持一次编写&#xff0c;多端发布&#xff0c;包括APP、小程序、H5等。 使用Thinkphp6框架进行后端开发。Thinkphp6是一个轻量级、高性能、面向对象的PHP开发框架&#xff0c;具有易…

springcloud 介绍

Spring Cloud是一个基于Spring Boot的微服务架构解决方案集合&#xff0c;它提供了一套完整的工具集&#xff0c;用于快速构建分布式系统。在Spring Cloud的架构中&#xff0c;服务被拆分为一系列小型、自治的微服务&#xff0c;每个服务运行在其独立的进程中&#xff0c;并通过…

jenkins入门6 --拉取代码

Jenkins代码拉取 需要的插件&#xff0c;缺少的安装下 新建一个item,选择freestyle project 源码管理配置如下&#xff1a;需要添加git库地址&#xff0c;和登录git的用户密码 配置好后执行编译&#xff0c;成功后拉取的代码在工作空间里

idea全局替换显示不全(ctrl+shift+R)

修改一下idea的配置就行 idea的默认显示条数为100&#xff0c;可以修改成10000

Ubuntu 下测试 NVME SSD 的读写速度

在 Ubuntu 系统下&#xff0c;测试 NVME SSD 的读写速度&#xff0c;有好多种方法&#xff0c;常用的有如下几种&#xff1a; 1. Gnome-disks Gnome-disks&#xff08;也称为“Disks”&#xff09;是 GNOME 桌面环境中的磁盘管理工具&#xff0c;有图形界面&#xff0c;是测试…

AI投资分析:用于股票评级的大型语言模型(LLMs)

“AI in Investment Analysis: LLMs for Equity Stock Ratings” 论文地址&#xff1a;https://arxiv.org/pdf/2411.00856 摘要 投资分析作为金融服务领域的重要组成部分&#xff0c;LLMs&#xff08;大型语言模型&#xff09;为股票评级带来了改进的潜力。传统的股票评级方式…

基于CLIP和DINOv2实现图像相似性方面的比较

概述 在人工智能领域&#xff0c;CLIP和DINOv2是计算机视觉领域的两大巨头。CLIP彻底改变了图像理解&#xff0c;而DINOv2为自监督学习带来了新的方法。 在本文中&#xff0c;我们将踏上一段旅程&#xff0c;揭示定义CLIP和DINOv2的优势和微妙之处。我们的目标是发现这些模型…

【学习笔记】数据结构(十)

内部排序 文章目录 内部排序10.1 概述10.2 插入排序10.2.1 直接插入排序10.2.2 其他插入排序10.2.2.1 折半插入排序(Binary Insertion Sort)10.2.2.2 2-路插入排序&#xff08;Two-Way Insertion Sort&#xff09;10.2.2.3 表插入排序&#xff08;Table Insertion Sort&#xf…

Unity学习笔记(七)使用状态机重构角色攻击

前言 本文为Udemy课程The Ultimate Guide to Creating an RPG Game in Unity学习笔记 攻击状态重构 首先我们重构攻击状态的动画 之前的动画&#xff0c;我们是使用状态(isAttacking)攻击次数(comboCounter)完成动画的过渡&#xff0c;这样虽然能完成功能&#xff0c;但是如…

Ubuntu20.04中安装ns-3.36及遇到的问题

一、安装虚拟机&#xff1a;VMware 17.5 参考教程&#xff1a;VMware17Pro虚拟机安装教程(超详细)-CSDN博客 博主&#xff1a;七维大脑 遇到的问题&#xff1a; Q1&#xff1a;安装ubuntu系统时&#xff0c;页面看不到”继续“选项&#xff0c;无法进行下一步 A&#xff…