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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SUB输入5V升压充电16.8V芯片HU5912

HU5912芯片,作为航誉微电子有限公司推出的一款高性能升压充电管理IC,自其面世以来,便以其出色的性能和广泛的应用领域,受到了业界的高度关注和赞誉。本文将详细介绍HU5912芯片的技术特点、应用优势、市场定位以及其在各类电子设备…

练习(继承)

大家好,今天我们写几道题来巩固一下我们所学的知识,以便我们更好的学习新内容。 方法重写: 继承: 注:java中只能继承一个类 那么今天分享就到这里,谢谢大家!!!

计算机网络 (28)虚拟专用网VPN

前言 虚拟专用网络(VPN)是一种在公共网络上建立私有网络连接的技术,它允许远程用户通过加密通道访问内部网络资源,实现远程办公和安全通信。 一、基本概念 定义:VPN是一种通过公共网络(如互联网&#xff09…

04-spring-理-ApplicationContext的实现

实现1&#xff1a;ClassPathXmlApplicationContext 1、内部维护了 DefaultListableBeanFactory 2、通过XmlBeanDefinitionReader 读取配置文件将结果加入到 DefaultListableBeanFactory 3、没有维护 bean后置处理器 &#xff0c;可以通过在xml配置 <context:annotation-c…

STM32的LED点亮教程:使用HAL库与Proteus仿真

学习目标&#xff1a;掌握使用STM32 HAL库点亮LED灯&#xff0c;并通过Proteus进行仿真验证&#xff01; 建立HAL库标准工程 1.新建工程文件夹 新建工程文件夹建议路径尽量为中文。建立文件夹的目的为了更好分类去管理项目工程中需要的各类工程文件。 首先需要在某个位置建立工…

回归预测 | MATLAB实ELM-Adaboost多输入单输出回归预测

回归预测 | MATLAB实ELM-Adaboost多输入单输出回归预测 目录 回归预测 | MATLAB实ELM-Adaboost多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 一、极限学习机&#xff08;ELM&#xff09; 极限学习机是一种单层前馈神经网络&#xff0c;具有训练速…

实现AVL树

目录 AVL树概念 AVL树结构 AVL树插入 LL型 - 右单旋 RR型 - 左单旋 LR型 - 左右双旋 RL型 - 右左双旋 插入代码实现 AVL树测试 附AVL树实现完整代码 AVL树概念 前面的博客介绍了搜索二叉树&#xff0c;二叉搜索树-CSDN博客 在某些特定的情况下&#xff0c;⼆叉搜索树…

unity学习11:地图相关的一些基础

目录 1 需要从 unity的 Asset Store 下载资源 1.1 下载资源 1.2 然后可以从 package Manager 里选择下载好的包&#xff0c;import到项目里 2 创建地形 2.1 创建地形 2.2 地形 Terrain大小 2.3 各种网格的尺寸大小 2.4 比较这个地形尺寸和创建的其他物体的大小对比 3 …

【vue】晋升路线图、蛇形进度条

一、效果图&#xff08;参考链接&#xff09; 代码实现 <template><div class"only-content"><h1 class"text-center my-3">讲师晋升路线</h1><!--时间轴线显示--><div class"time-line"><div class&qu…

VisionPro软件Image Stitch拼接算法

2D图像拼接的3种情景 1.一只相机取像位置固定&#xff0c;或者多只相机固定位置拍图&#xff0c;硬拷贝拼图&#xff0c;采用CopyRegion工具实现 2.一只或多只相机在多个位置拍照&#xff0c;相机视野互相重叠&#xff0c;基于Patmax特征定位后&#xff0c;无缝 拼图&#xff…

vue2项目报错You may need an appropriate loader to handle this file type

npm run 运行 vue2 项目时报错如下&#xff1a; error in ./node_modules/quill/formats/blockquote.jsModule parse failed: Unexpected token (3:18) You may need an appropriate loader to handle this file type, currently no loaders are configured to process this …

Cyber Security 101-Web Hacking-Burp Suite: The Basics(Burp Suite:基础知识)

使用 Burp Suite 进行 Web 应用程序渗透测试的简介。 任务1&#xff1a;介绍 欢迎来到 Burp Suite Basics&#xff01; 这个特定的房间旨在了解 Burp Suite Web 应用程序安全测试框架的基础知识。我们的重点将围绕 以下关键方面&#xff1a; Burp Suite 的全面介绍。全面概述…

基于Informer网络实现电力负荷时序预测——cross validation交叉验证与Hyperopt超参数调优

前言 系列专栏:【深度学习&#xff1a;算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域&#xff0c;讨论了各种复杂的深度神经网络思想&#xff0c;如卷积神经网络、循环神经网络、生成对…

【计算机网络】课程 实验二 交换机基本配置和VLAN 间路由实现

实验二 交换机基本配置和VLAN 间路由实现 一、实验目的 1&#xff0e;了解交换机的管理方式。 2&#xff0e;掌握通过Console接口对交换机进行配置的方法。 3&#xff0e;掌握交换机命令行各种模式的区别&#xff0c;能够使用各种帮助信息以及命令进行基本的配置。 4&…

MySQL入门学习笔记

第一章 数据库系统概述 数据库的4个基本概念 数据、数据库、数据库管理系统、数据库系统是与数据库技术密切相关的4个基本概念 数据 数据是数据库中存储的基本对象&#xff0c;描述事物的符号记录称为数据&#xff0c;数据的表现形式还不能完全表达其内容&#xff0c;需要…

【C++】构造函数与析构函数

写在前面 构造函数与析构函数都是属于类的默认成员函数&#xff01; 默认成员函数是程序猿不显示声明定义&#xff0c;编译器会中生成。 构造函数和析构函数的知识需要建立在有初步类与对象的基础之上的&#xff0c;关于类与对象不才在前面笔记中有详细的介绍&#xff1a;点我…

海外云服务器能用来做什么?

海外云服务器不仅服务种类繁多&#xff0c;而且能满足多行业的需求&#xff0c;方便了越来越多的企业与个人。本文将探讨海外云服务器的核心服务及其适用领域&#xff0c;帮助企业更好地了解这一技术资源。 云存储&#xff1a;安全高效的数据管理 海外云服务器为用户提供了稳定…

计算机毕业设计Python+CNN卷积神经网络高考推荐系统 高考分数线预测 高考爬虫 协同过滤推荐算法 Vue.js Django Hadoop 大数据毕设

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

基于物联网的冻保鲜运输智能控制系统

基于物联网的冻保鲜运输智能控制系统设计文档 1. 项目开发背景 随着全球化贸易的发展&#xff0c;冷链物流在现代运输行业中扮演着日益重要的角色。尤其是冻品、食品、药品等对运输环境有着严格要求的货物&#xff0c;其运输过程中温度、湿度等环境参数必须严格控制&#xff…