You are on page 1of 17

KHOA CÔNG NGHỆ THÔNG TIN

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN


227 Nguyễn Văn Cừ, Phường 4, Quận 5, TP.HCM 4.0
Điện thoại: (08) 38.354.266 – Fax: (08) 38.350.096

CSC12111 – Quản trị cơ sở dữ liệu hiện đại

HƯỚNG DẪN THỰC HÀNH


Neo4J

I. Thông tin chung

Mã số hướng dẫn: HDTH_Neo4j


Thời lượng dự kiến: 9 tiếng
Deadline nộp bài: -
Hình thức: Tự học
Hình thức nộp bài: Nộp qua Moodle môn học
GV phụ trách: Nguyễn Trần Minh Thư, Tiết Gia Hồng,
Phạm Minh Tú
Thông tin liên lạc với GV: pmtu@fit.hcmus.edu.vn

II. Chuẩn đầu ra cần đạt

Bài hướng dẫn này nhằm mục tiêu đạt được các chuẩn đầu ra sau:
 -
 -
III. Nội dung hướng dẫn

1. Cài đặt (Buổi 01)


 Cài đặt Neo4J trên window
1. Truy cập trang chủ Neo4j: https://neo4j.com/product/neo4j-graph-database/
2. Chọn nút Get Start như hình bên.

3. Tải Neo4J Desktop như hình


bên.
KHOA CÔNG NGHỆ THÔNG TIN
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
227 Nguyễn Văn Cừ, Phường 4, Quận 5, TP.HCM 4.0
Điện thoại: (08) 38.354.266 – Fax: (08) 38.350.096

4. Điền thông tin như hình bên dưới.

5. Click bộ cài Neo4j Desktop và cài đặt theo hướng dẫn trên màn hình

6. Lưu ý đường dẫn chứa dữ liệu ứng dụng

7. Cuối cùng copy license và cung cấp cho bản đã cài đặt
KHOA CÔNG NGHỆ THÔNG TIN
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
227 Nguyễn Văn Cừ, Phường 4, Quận 5, TP.HCM 4.0
Điện thoại: (08) 38.354.266 – Fax: (08) 38.350.096

Sao chép

Dán vào software


key

Hướng dẫn xây dựng và Hướng dẫn sử dụng truy vấn


truy vấn CSDL dùng neo4j CSDL đồ thị dùng Cypher
8. Bắt đầu với màn hình chính.

Hướng dẫn sử dụng


giao diện
KHOA CÔNG NGHỆ THÔNG TIN
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
227 Nguyễn Văn Cừ, Phường 4, Quận 5, TP.HCM 4.0
Điện thoại: (08) 38.354.266 – Fax: (08) 38.350.096

Mở giao diện truy vấn

 Làm quen việc tạo và truy vấn trên CSDL đồ thị Neo4j
1. Tạo một CSDL đồ thị. Ví dụ: create database [tên database]
Ví dụ tạo CSDL movies

Chạy câu lệnh dùng icon như trên hoặc nhấn phím Enter
2. Sử dụng CSDL vừa tạo. Ví dụ: :use [tên database]
3. Liệt kê tất cả CSDL trong hệ thống. Ví dụ: :dbs

Tạo dữ liệu node. Ví dụ tạo 1 node Movie và 3 node Person, cuối cùng tạo mối
quan hệ giữa các node

CREATE (TiecTrangMau:Movie {title:'Tiệc Trăng Máu',


released:2020, tagline:'Hot 2020'})

CREATE (DucThinh:Person {name:'Đức Thịnh', born:1964})

CREATE (HuaViVan:Person {name:'Hứa Vĩ Văn', born:1987})

CREATE (ThaiHoa:Person {name:'Thái Hòa', born:1975})

CREATE (QuangDung:Person {name:'Nguyễn Quang Dũng', born:1975})

CREATE

(DucThinh)-[:ACTED_IN {roles:['Tuấn Mạnh']}]->(TiecTrangMau),


KHOA CÔNG NGHỆ THÔNG TIN
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
227 Nguyễn Văn Cừ, Phường 4, Quận 5, TP.HCM 4.0
Điện thoại: (08) 38.354.266 – Fax: (08) 38.350.096

(HuaViVan)-[:ACTED_IN {roles:['Ngọc Quang']}]->(TiecTrangMau),

(ThaiHoa)-[:ACTED_IN {roles:['Bình']}]->(TiecTrangMau),

(QuangDung)-[:DIRECTED]->(TiecTrangMau)

4. Xem các node movie và các quan hệ của nó trên CSDL đồ thị.
MATCH (mv:Movie) RETURN mv

Kết quả.

 Làm quen việc build ứng dụng dùng Neo4j với C#


Neo4j hỗ trợ Driver làm việc với .NET tại link
https://www.nuget.org/packages/Neo4j.Driver/
Nó phụ thuộc vào các thư viện .NET như bên dưới.
• .NETStandard (^2.0)
• System.Net.NameResolution (^4.3.0)
• System.Net.Security (^4.3.2)
• System.Net.Sockets (^4.3.0)
• System.Runtime.InteropServices.RuntimeInformation (^4.3.0)
• System.Runtime.Serialization.Primitives (^4.3.0)
• System.Threading.Thread (^4.3.0)
• System.ValueTuple (^4.5.0)

Ví dụ: Xây dựng chương trình HelloWorld tương tác với CSDL Neo4j

1. Tạo Project .Net Core


KHOA CÔNG NGHỆ THÔNG TIN
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
227 Nguyễn Văn Cừ, Phường 4, Quận 5, TP.HCM 4.0
Điện thoại: (08) 38.354.266 – Fax: (08) 38.350.096

2. Cài Driver Neo4J


Cài thông qua Nuget tool

Gõ câu lệnh sau đây trong cửa sổ Package Manager Console


Install-Package Neo4j.Driver -Version 4.2.0

Cài đặt thành công


KHOA CÔNG NGHỆ THÔNG TIN
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
227 Nguyễn Văn Cừ, Phường 4, Quận 5, TP.HCM 4.0
Điện thoại: (08) 38.354.266 – Fax: (08) 38.350.096

3. Kết nối CSDL


Cần cung cấp các thông tin kết nối CSDL

private readonly string _uri = "bolt://localhost:7687 ";


private static string _user = "neo4j";
private static string _password = "";
4. Truy vấn dữ liệu từ ứng dụng

IResultCursor cursor;
IDriver driver = GraphDatabase.Driver("bolt://localhost:7687/db/test",
AuthTokens.Basic(_user, _password));
IAsyncSession session = driver.AsyncSession();

try
{
cursor = await session.RunAsync("MATCH(mv:Movie) return mv");
List<IRecord> lst = await cursor.ToListAsync();
}
catch (Exception ex)
{

}
KHOA CÔNG NGHỆ THÔNG TIN
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
227 Nguyễn Văn Cừ, Phường 4, Quận 5, TP.HCM 4.0
Điện thoại: (08) 38.354.266 – Fax: (08) 38.350.096

Kết quả:

2. Ngôn ngữ truy vấn Cypher (Buổi 02)


CSDL đồ thị trong Neo4j bao gồm tập các node và các mối quan hệ của nó. Node là đại diện
các thực thể, cặp node có mối quan hệ với nhau.
Ngôn ngữ truy vấn của Neo4j là Cypher, truy vấn dựa trên các mẫu đơn giản đến phức tạp.
❖ Các mẫu truy vấn đơn giản là các mẫu chỉ có một mối quan hệ giữa các cặp node ( có
thể với chính nó)
Ví dụ.
Con người sống ở thành phố, thành phố thuộc quốc gia
Person LIVES_IN a City or a City is PART_OF a Country
❖ Các mẫu truy vấn phức tạp có nhiều mối quan hệ để giải thích các khái niệm phức
tạp.
Ví dụ:
(:Person) -[:LIVES_IN]-> (:City) -[:PART_OF]-> (:Country)

❖ Ví dụ biểu diễn Node trên Cypher

()
(matrix)
(:Movie)
(matrix:Movie)
(matrix:Movie {title: "The Matrix"})
(matrix:Movie {title: "The Matrix", released: 1997})
(): Biểu diễn 1 node
(:Movie): Biểu diễn Label của node
KHOA CÔNG NGHỆ THÔNG TIN
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
227 Nguyễn Văn Cừ, Phường 4, Quận 5, TP.HCM 4.0
Điện thoại: (08) 38.354.266 – Fax: (08) 38.350.096

{title:”The matrix”}: Thuộc tính “title” của 1 node


❖ Ví dụ biểu diễn mối quan hệ trên Cypher

-->
-[role]->
-[:ACTED_IN]->
-[role:ACTED_IN]->
-[role:ACTED_IN {roles: ["Neo"]}]->

(--) : mối quan hệ vô hướng

(<--, -->): mối quan hệ có hướng

[…]: Thêm thông tin chi tiết mối quan hệ

role:ACTED_IN: role là biến, ACTED_IN là Label tương tự node

❖ Ví dụ mẫu

(keanu:Person:Actor {name: "Keanu Reeves"} )


-[role:ACTED_IN {roles: ["Neo"] } ]->
(matrix:Movie {title: "The Matrix"} )

Sự kết hợp Ví dụ node và mối quan hệ tạo thành một mẫu.


❖ Các biến mẫu
acted_in = (:Person)-[:ACTED_IN]->(:Movie)
Biến acted_in sẽ chứa 2 node và mối quan hệ giữa chúng.
❖ Clauses – Mệnh đề
Câu lệnh Cypher có nhiều mệnh đề, mỗi mệnh đề thực hiện 1 công việc đơn lẻ, kết
hợp nhiều mệnh đề để giải quyết nhiều công việc phức tạp.
 Create data
Mệnh đề CREATE cho phép tạo data.
Ví dụ 1
CREATE (:Movie { title:"The Matrix",released:1997 })
Mệnh đề trên tạo 1 node, 1 label, và 2 thuộc tính

+-------------------+
| No data returned. |
+-------------------+
Nodes created: 1
Properties set: 2
Labels added: 1

Ví dụ 2.

CREATE (p:Person { name:"Keanu Reeves", born:1964 })


RETURN p
KHOA CÔNG NGHỆ THÔNG TIN
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
227 Nguyễn Văn Cừ, Phường 4, Quận 5, TP.HCM 4.0
Điện thoại: (08) 38.354.266 – Fax: (08) 38.350.096

Sự khác biệt so với ví dụ 1 là khai báo biến p và dùng mệnh đề RETURN


Mục đích là tạo dữ liệu và trả kết quả dữ liệu vừa tạo.

+----------------------------------------+
| p |
+----------------------------------------+
| Node[1]{name:"Keanu Reeves",born:1964} |
+----------------------------------------+
1 row
Nodes created: 1
Properties set: 2
Labels added: 1

Ví dụ 3.

CREATE (a:Person { name:"Tom Hanks",born:1956 })


-[r:ACTED_IN { roles: ["Forrest"]}]->(m:Movie { title:"Forrest
Gump",released:1994 })
CREATE (d:Person { name:"Robert Zemeckis", born:1951 })-
[:DIRECTED]->(m) RETURN a,d,r,m

Tạo dữ liệu với cấu trúc phức tạp bao gồm các node và các mối quan hệ của nó.
Node Person a có mối quan hệ node Movie m với quan hệ ACTED_IN, Node Person
d có mối quan hệ với node m với quan hệ DIRECTED

 Read
❖ Đọc tất cả các node
Ví dụ: MATCH (n) RETURN n
❖ Đọc tất cả các node lọc theo Label
Ví dụ: MATCH (movie:Movie) RETURN movie.title
Tìm tất cả các title của các node có Lable là Movie.
❖ Tìm các node có liên quan
KHOA CÔNG NGHỆ THÔNG TIN
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
227 Nguyễn Văn Cừ, Phường 4, Quận 5, TP.HCM 4.0
Điện thoại: (08) 38.354.266 – Fax: (08) 38.350.096

Ví dụ: MATCH (AUTH_IN {name:"Ho Bao Quoc"})--(book) RETURN book.title


Tìm tất cả sách có tác giả là thầy Hồ Bảo Quốc.
❖ Tìm các node với Label
Tìm các node có Lable là Author với name là cô Nguyễn Trần Minh Thư có liên
quan đến các node với Label Book. Thông tin trả về gồm tên tác giả và tiêu đề sách.
MATCH (n:Author{name:'Nguyen Tran Minh Thu'})--(book:Book)RETURN
n.name, book.title
Có thể dùng mối quan hệ có hướng hoặc vô hướng
MATCH (n:Author{name:'Nguyen Tran Minh Thu'})--(book:Book)RETURN
n.name, book.title
MATCH (n:Author{name:'Nguyen Tran Minh Thu'}) (book:Book)RETURN
n.name, book.title
MATCH (n:Author{name:'Nguyen Tran Minh Thu'}) (book:Book)RETURN
n.name, book.title
Có thể tìm tên mối quan hệ bằng cách dùng biến
MATCH (n:Author{name:'Nguyen Tran Minh Thu'})-[r]-
>(book:Book)RETURN n.name, book.title,type(r)
n.name book.title type(r)
"Nguyen Tran Minh Thu" "Data Analysis" "AUTH_IN"
 Update

Đổi tên tác giả, đầu tiên load tên tác giả, sau đó thực hiện thay đổi giá trị mới
cho thuộc tính Name

Ví dụ:

MATCH (p:Author {name: 'Nguyen Tran Minh Thu'})

SET p.name = 'Nguyễn Trần Minh Thư'

RETURN p

 Delete
Ví dụ:
Muốn xóa node tác giả Hồ Bảo Quốc, đầu tiên xóa mối quan hệ tác giả với Book
MATCH (p:Author {name: 'Ho Bao Quoc'})-[r:AUTH_IN]-(book)
DELETE r
Sau đó tiếp tục xóa tác giả
MATCH (p:Author {name: 'Ho Bao Quoc'})DELETE p
 Import data
❖ Import dữ liệu từ file csv
KHOA CÔNG NGHỆ THÔNG TIN
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
227 Nguyễn Văn Cừ, Phường 4, Quận 5, TP.HCM 4.0
Điện thoại: (08) 38.354.266 – Fax: (08) 38.350.096

Vì lý do bảo mật, Neo4j quy định các file cần import phải được đặt trong thư
mục import

Dữ liệu ban đầu:

Bắt đầu import csv và tạo dữ liệu từ file import


LOAD CSV WITH HEADERS FROM 'file:///giaovien.csv' AS gv
WITH gv WHERE gv.Ma IS NOT NULL
CREATE (:GiaoVien {Ma: gv.Ma,
HoTen:gv.HoTen,NgaySinh:gv.NgaySinh, DiaChi:gv.DiaChi })
Xem lại dữ liệu
MATCH(gv:GiaoVien) return gv

Link tham khảo: https://neo4j.com/developer/guide-import-csv/

3. Xây dựng ứng dụng giao tiếp (Buổi 03).


 Dùng C# với Neo4J
KHOA CÔNG NGHỆ THÔNG TIN
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
227 Nguyễn Văn Cừ, Phường 4, Quận 5, TP.HCM 4.0
Điện thoại: (08) 38.354.266 – Fax: (08) 38.350.096

Chuẩn bị các bước cần thiết như phần 1. Lần này chúng ta sẽ bắt đầu xây dựng một
Web API có làm việc với CSDL đồ thị Neo4J
Bước 1: Tạo Project Web API
Tạo Project Web ASP.NET và đặt tên WebAPINeo4j

Cài đặt Neo4J Driver thông qua trình quản lý nudget


KHOA CÔNG NGHỆ THÔNG TIN
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
227 Nguyễn Văn Cừ, Phường 4, Quận 5, TP.HCM 4.0
Điện thoại: (08) 38.354.266 – Fax: (08) 38.350.096

Thay đổi nội dung trong class ValuesController

Khai báo các thông tin cần thiết kết nối CSDL

private readonly string _uri = "bolt://localhost:7687";


private static string _user = "neo4j";
private static string _password = "123456";

Để kết nối CSDL, dùng lớp GraphDatabase và gọi Driver của nó

IDriver driver = GraphDatabase.Driver("bolt://localhost:7687",


AuthTokens.Basic(_user, _password));
IAsyncSession session = driver.AsyncSession();
KHOA CÔNG NGHỆ THÔNG TIN
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
227 Nguyễn Văn Cừ, Phường 4, Quận 5, TP.HCM 4.0
Điện thoại: (08) 38.354.266 – Fax: (08) 38.350.096

Gọi hàm RunAsync và truyền giá trị là câu truy vấn Cypher

cursor = await session.RunAsync("MATCH(gv:GiaoVien) return gv");

Lúc này giá trị trả về gồm list các Record. Toàn bộ mã nguồn thực hiện đọc các node
GiaoVien như sau:

public class ValuesController : ApiController


{
private readonly string _uri = "bolt://localhost:7687";
private static string _user = "neo4j";
private static string _password = "123456";

// GET api/values
public async Task<IEnumerable<IRecord>> Get()
{
IResultCursor cursor;

IDriver driver = GraphDatabase.Driver("bolt://localhost:7687",


AuthTokens.Basic(_user, _password));
IAsyncSession session = driver.AsyncSession();
List<IRecord> lst = null;
try
{
cursor = await session.RunAsync("MATCH(gv:GiaoVien) return gv");
lst = await cursor.ToListAsync();
}
catch (Exception ex)
{

return lst;
}

Để xem dữ liệu, hãy start project và truy cập API như sau:

http://localhost:56164/api/values

Với dữ liệu Json, chúng ta có thể rút trích và hiển thị trên giao diện phù hợp (Web, Mobile)

 Dùng python với Neo4J


Để sử dụng Neo4j trong python, đầu tiên hãy cài đặt python theo hướng dẫn link:
https://www.python.org/downloads/release/python-391/
Sau khi cài python, cài đặt biến môi trường, có thể kiểm tra lại bằng cách vào CMD
và gõ dòng lệnh
KHOA CÔNG NGHỆ THÔNG TIN
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
227 Nguyễn Văn Cừ, Phường 4, Quận 5, TP.HCM 4.0
Điện thoại: (08) 38.354.266 – Fax: (08) 38.350.096

C:\Users\pmtu>python -V
Output: Python 3.9.1
Sau khi cài đặt python, tiến hành cài đặt driver neo4j dùng pip (Lưu ý cài đặt biến môi
trường cho pip - C:\Users\(window user)
\AppData\Local\Programs\Python\Python39\Scripts)
pip install neo4j
Sau khi cài đặt neo4j, gõ python và nhấn enter
Sau đó thực hiện các câu lệnh sau để làm đọc các node GiaoVien như ví dụ trước. Đây
là output của các câu lệnh.
>>> from neo4j import GraphDatabase
>>> driver =
GraphDatabase.driver("bolt://localhost:7687",auth=("neo4j","123456"))
>>> session = driver.session()
>>> result = session.run("MATCH(gv:GiaoVien) return gv")
>>> [print (record) for record in result]
<Record gv=<Node id=9 labels=frozenset({'GiaoVien'}) properties={'Ma': '1',
'HoTen': 'Tiet Gia Hong', 'NgaySinh': '1984', 'DiaChi': 'Tp HCM'}>>
<Record gv=<Node id=11 labels=frozenset({'GiaoVien'}) properties={'Ma': '2',
'HoTen': 'Ho Thi Hoang Vy', 'NgaySinh': '1985', 'DiaChi': 'Tp HCM'}>>
<Record gv=<Node id=12 labels=frozenset({'GiaoVien'}) properties={'Ma': '3',
'HoTen': 'Pham Minh Tu', 'NgaySinh': '1986', 'DiaChi': 'Ben Tre'}>>
[None, None, None]
>>>
KHOA CÔNG NGHỆ THÔNG TIN
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
227 Nguyễn Văn Cừ, Phường 4, Quận 5, TP.HCM 4.0
Điện thoại: (08) 38.354.266 – Fax: (08) 38.350.096

4. Neo4j Graph Data Science


 Chủ đề này có thể áp dụng trong chuyên ngành Data Science, chỉ có thể giới thiệu
trong phần lý thuyết.

IV. Các yêu cầu & quy định chi tiết cho bài nộp

V. Cách đánh giá

VI. Tài liệu tham khảo

[1] Graph Databases: https://www.amazon.com/Graph-Databases-Opportunities-


Connected-Data/dp/1491930896

VII. Các quy định khác

You might also like