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: '[email protected]',

phone_number: '123-4567-8901',

address: '北京市海淀区'

})

CREATE (r2:Reader {

name: '李四',

dob: '2005-02-28',

email: '[email protected]',

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", "[email protected]", "123-4567-8901", "北京市海淀区")

session.write_transaction(create_reader, "李四", "2005-02-28", "[email protected]", "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")

相关推荐
2302_809798326 分钟前
【JavaWeb】MySQL
数据库·mysql
drowingcoder14 分钟前
MySQL相关
数据库
Musennn1 小时前
MySQL刷题相关简单语法集合
数据库·mysql
Think Spatial 空间思维2 小时前
【HTTPS基础概念与原理】TLS握手过程详解
数据库·网络协议·https
laowangpython2 小时前
MySQL基础面试通关秘籍(附高频考点解析)
数据库·mysql·其他·面试
mooyuan天天3 小时前
SQL注入报错“Illegal mix of collations for operation ‘UNION‘”解决办法
数据库·web安全·sql注入·dvwa靶场·sql报错
运维-大白同学3 小时前
go-数据库基本操作
开发语言·数据库·golang
R-sz3 小时前
通过从数据库加载MinIO配置并初始化MinioClient,spring boot之Minio上传
数据库·oracle
洛阳泰山3 小时前
Windows系统部署MongoDB数据库图文教程
数据库·windows·mongodb
医只鸡腿子4 小时前
3.2/Q2,Charls最新文章解读
数据库·数据挖掘·数据分析·深度优先·数据库开发