Neo4j là một cơ sở dữ liệu đồ thị được sử dụng để tạo các mối quan hệ dữ liệu. Dữ liệu bên trong các cơ sở dữ liệu truyền thống được lưu trong một cấu trúc giống như bảng. Một cơ sở dữ liệu đồ họa ghi lại các mối quan hệ giữa các nút dữ liệu. Mỗi nút lưu trữ các tham chiếu đến tất cả các nút khác mà nó được kết nối. Các cơ sở dữ liệu truyền thống không lưu dữ liệu mối quan hệ trực tiếp, nhưng chúng có thể tìm ra các kết nối bằng cách tìm kiếm xung quanh các cấu trúc dữ liệu với sự trợ giúp của lập chỉ mục tốn kém và mất thời gian. Một cơ sở dữ liệu đồ họa như Neo4j tránh được tất cả các chi phí này và có thể mã hóa và truy vấn các mối quan hệ phức tạp.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22616%22%20height=%22436%22%3E%3C/svg%3E
Neo4j được phát triển bởi Neo Technology. Nó được viết bằng Java và Scala và có sẵn ở cả hai phiên bản, phiên bản cộng đồng miễn phí và phiên bản doanh nghiệp. Neo4j sử dụng ngôn ngữ truy vấn riêng của nó được gọi là Cypher, nhưng các truy vấn có thể được viết theo các phong cách khác.
Hướng dẫn này sẽ hướng dẫn bạn cách cài đặt và cấu hình Neo4j trên máy chủ Ubuntu 22.04.
Cài đặt các gói tiện ích cơ bản. Một số trong số chúng có thể đã được cài đặt.
Thêm kho lưu trữ Neo4j vào nguồn APT của hệ thống của bạn thư mục.
Để tránh rủi ro khi nâng cấp lên phiên bản chính tiếp theo, bạn có thể chỉ định phiên bản chính và phiên bản phụ cần thiết thay cho
Lệnh sau sẽ thêm kho lưu trữ Neo4j 5.x, nghĩa là bạn sẽ không phải nâng cấp lên phiên bản 6.x bất cứ khi nào phát hành.
Cập nhật danh sách kho lưu trữ hệ thống.
Liệt kê các phiên bản Neo4j có sẵn cho cài đặt.
Cài đặt phiên bản Neo4j Community.
Bạn có thể cài đặt phiên bản cụ thể bằng cách sử dụng lệnh sau lệnh.
Lưu ý rằng phiên bản bao gồm thành phần phiên bản epoch (1
, theo chính sách của Debian về phiên bản.
Neo4j sẽ tự động cài đặt phiên bản JDK cần thiết cùng với nó.
Bật Neo4j dịch vụ.
Khởi động dịch vụ Neo4j.
Kiểm tra trạng thái của Neo4j dịch vụ.
Kết nối với Cypher Shell.
Bạn sẽ được nhắc nhập tên người dùng và mật khẩu. Tên người dùng và mật khẩu mặc định là
Điều này xác nhận kết nối thành công với Neo4j DBMS.
Nhập
Chúng ta có thể cấu hình Neo4j để chấp nhận kết nối từ máy chủ từ xa bằng cách chỉnh sửa tệp cấu hình của nó. Neo4j lưu trữ các thiết lập của nó trong tệp
Tìm dòng được chú thích
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Theo mặc định, giá trị
Bạn cũng có thể cấu hình Neo4j để sử dụng giao diện IPv6. Giống như IPv4, bạn có thể đặt giá trị
Nếu bạn cấu hình Neo4j bằng địa chỉ IPv6, bạn sẽ không thể kết nối với cypher-shell bằng cách sử dụng trực tiếp địa chỉ IPv6. Thay vào đó, bạn cần cấu hình tên DNS phân giải thành địa chỉ IPv6 hoặc thêm mục vào tệp
Ví dụ: máy chủ Neo4j có địa chỉ IPv6 như
Sau đó, bạn có thể kết nối với máy chủ từ hệ thống từ xa bằng tên mà bạn đã chỉ định như hiển thị bên dưới.
Nếu bạn hạn chế Neo4j sử dụng địa chỉ localhost IPv6 là ::1, thì bạn có thể kết nối với nó cục bộ trên chính máy chủ Neo4j bằng tên ip6-localhost được cấu hình sẵn từ
Khi bạn gọi
Neo4j tạo hai ổ cắm mạng, một trên cổng 7474 cho giao diện HTTP tích hợp và giao thức bolt chính trên cổng 7687.
Ubuntu 22.04 sử dụng Tường lửa đơn giản (UFW) bằng mặc định.
Cấu hình tường lửa để cho phép máy chủ từ xa đáng tin cậy truy cập vào giao diện
Thay thế địa chỉ IP của hệ thống từ xa đáng tin cậy vào vị trí Giá trị
Thay thế mạng thực tế vào vị trí của giá trị
Để cho phép truy cập vào máy chủ từ xa bằng IPv6, bạn có thể sử dụng lệnh sau lệnh.
Thay thế địa chỉ IPv6 của hệ thống đáng tin cậy của bạn vào vị trí của giá trị
Giống như IPv4, bạn có thể cho phép một phạm vi địa chỉ IPv6 bằng cách sử dụng sau lệnh.
Một lần nữa, hãy thay thế phạm vi mạng đáng tin cậy của bạn vào phạm vi mạng 2001
B8::/32 được tô sáng.
Tải lại tường lửa để áp dụng các thay đổi.
Kiểm tra trạng thái của tường lửa.
Nếu bạn đã cấu hình Neo4j để truy cập từ xa, hãy sử dụng lệnh sau để kết nối với Neo4j từ hệ thống từ xa.
Tại đây
Nếu bạn đang sử dụng IPv6, hãy đảm bảo rằng bạn có mục
Đảm bảo rằng
Chúng ta hãy thêm một nút có tên là
Bạn sẽ nhận được những thông tin sau đầu ra.
Tiếp theo, chúng ta sẽ thêm nhiều nhân viên hơn và liên kết họ bằng mối quan hệ được gọi là
Thêm ba nhân viên nữa và liên kết họ bằng mối quan hệ
Bạn sẽ nhận được kết quả tương tự đầu ra.
Bây giờ, chúng ta hãy tạo một số mối quan hệ.
Vì Peter và Chris làm việc trong cùng một phòng ban và có cùng các thuộc tính như các nút, chúng ta sẽ tạo một mối quan hệ với cột tên.
Bây giờ, chúng ta hãy tạo một kết nối khác giữa Sammy và Peter vì họ đang làm việc trên cùng một dự án.
Chúng ta hãy hiển thị tất cả dữ liệu này bằng truy vấn sau.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22616%22%20height=%22436%22%3E%3C/svg%3E
Neo4j được phát triển bởi Neo Technology. Nó được viết bằng Java và Scala và có sẵn ở cả hai phiên bản, phiên bản cộng đồng miễn phí và phiên bản doanh nghiệp. Neo4j sử dụng ngôn ngữ truy vấn riêng của nó được gọi là Cypher, nhưng các truy vấn có thể được viết theo các phong cách khác.
Hướng dẫn này sẽ hướng dẫn bạn cách cài đặt và cấu hình Neo4j trên máy chủ Ubuntu 22.04.
Điều kiện tiên quyết
-
Máy chủ chạy Ubuntu 22.04 với tối thiểu 1 lõi CPU và 2 GB bộ nhớ. Bạn sẽ cần nâng cấp máy chủ theo yêu cầu.
-
Người dùng không phải root có quyền sudo.
-
Đảm bảo mọi thứ đã được cập nhật.
Mã:
$ sudo apt update
Mã:
$ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
Bước 1 - Cài đặt Neo4j
Bước đầu tiên để cài đặt Neo4j là thêm khóa GPG.
Mã:
$ curl -fsSL https://debian.neo4j.com/neotechnology.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/neo4j.gpg
Mã:
$ echo "deb [signed-by=/usr/share/keyrings/neo4j.gpg] https://debian.neo4j.com stable latest" | sudo tee -a /etc/apt/sources.list.d/neo4j.list
latest
trong lệnh trên.Lệnh sau sẽ thêm kho lưu trữ Neo4j 5.x, nghĩa là bạn sẽ không phải nâng cấp lên phiên bản 6.x bất cứ khi nào phát hành.
Mã:
$ echo "deb [signed-by=/usr/share/keyrings/neo4j.gpg] https://debian.neo4j.com stable 5" | sudo tee -a /etc/apt/sources.list.d/neo4j.list
Mã:
$ sudo apt update
Mã:
$ apt list -a neo4j
Listing... Done
neo4j/stable 1:5.3.0 all
neo4j/stable 1:5.2.0 all
neo4j/stable 1:5.1.0 all
Mã:
$ sudo apt install neo4j
Mã:
$ sudo apt install neo4j=1:5.3.0
Neo4j sẽ tự động cài đặt phiên bản JDK cần thiết cùng với nó.
Bật Neo4j dịch vụ.
Mã:
$ sudo systemctl enable neo4j
Mã:
$ sudo systemctl start neo4j
Mã:
$ sudo systemctl status neo4j
? neo4j.service - Neo4j Graph Database Loaded: loaded (/lib/systemd/system/neo4j.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2023-01-21 20:50:52 UTC; 33s ago Main PID: 5241 (java) Tasks: 72 (limit: 1030) Memory: 399.3M CPU: 20.350s CGroup: /system.slice/neo4j.service
Bước 2 - Kiểm tra kết nối
Neo4j sử dụng Cypher Shell để làm việc với dữ liệu.Kết nối với Cypher Shell.
Mã:
$ cypher-shell
neo4j
. Bạn sẽ được yêu cầu chọn một mật khẩu mới.
Mã:
username: neo4j
password:
Password change required
new password:
confirm password:
Connected to Neo4j using Bolt protocol version 5.0 at neo4j://localhost:7687 as user neo4j.
Type :help for a list of available commands or :exit to exit the shell.
Note that Cypher queries must end with a semicolon.
neo4j@neo4j>
Nhập
:exit
để thoát khỏi shell.
Mã:
neo4j@neo4j> :exit
Bye!
Bước 3 - Cấu hình Neo4j để Truy cập từ xa
Đối với môi trường sản xuất, bạn có thể cần xác nhận Neo4j chấp nhận kết nối từ máy chủ từ xa. Theo mặc định, Neo4j chỉ chấp nhận kết nối từlocalhost
.Chúng ta có thể cấu hình Neo4j để chấp nhận kết nối từ máy chủ từ xa bằng cách chỉnh sửa tệp cấu hình của nó. Neo4j lưu trữ các thiết lập của nó trong tệp
/etc/neo4j/neo4j.conf
. Mở nó để chỉnh sửa.
Mã:
$ sudo nano /etc/neo4j/neo4j.conf
#dbms.default_listen_address=0.0.0.0
và bỏ chú thích bằng cách xóa phần đầu băm.
Mã:
. . .
#*****************************************************************
# Network connector configuration
#*****************************************************************
# With default configuration Neo4j only accepts local connections.
# To accept non-local connections, uncomment this line:
server.default_listen_address=0.0.0.0
. . .
Theo mặc định, giá trị
0.0.0.0
sẽ liên kết Neo4j với tất cả các giao diện IPv4 khả dụng trên hệ thống của bạn, bao gồm cả localhost. Nếu bạn muốn giới hạn Neo4j ở một địa chỉ IP cụ thể, ví dụ như IP mạng riêng, hãy chỉ định địa chỉ IP được gán cho giao diện mạng riêng của máy chủ tại đây.Bạn cũng có thể cấu hình Neo4j để sử dụng giao diện IPv6. Giống như IPv4, bạn có thể đặt giá trị
default_listen_address
thành một địa chỉ IPv6 cụ thể mà bạn sẽ sử dụng để giao tiếp với Neo4j. Nếu bạn muốn giới hạn Neo4j chỉ sử dụng địa chỉ IPv6 cục bộ cho máy chủ của mình, hãy chỉ định ::1
, tương ứng với localhost sử dụng ký hiệu IPv6.Nếu bạn cấu hình Neo4j bằng địa chỉ IPv6, bạn sẽ không thể kết nối với cypher-shell bằng cách sử dụng trực tiếp địa chỉ IPv6. Thay vào đó, bạn cần cấu hình tên DNS phân giải thành địa chỉ IPv6 hoặc thêm mục vào tệp
/etc/hosts
của hệ thống từ xa để ánh xạ địa chỉ thành tên. Sau đó, bạn sẽ có thể sử dụng tên tệp DNS hoặc máy chủ để kết nối với Neo4j bằng IPv6 từ hệ thống từ xa của mình.Ví dụ: máy chủ Neo4j có địa chỉ IPv6 như
2001:db8::1
sẽ yêu cầu hệ thống kết nối từ xa phải có mục /etc/hosts
như được hiển thị bên dưới.
Mã:
2001:db8::1 your_hostname
Mã:
$ cypher-shell -a 'neo4j://your_hostname:7687'
/etc/hosts
tệp được hiển thị bên dưới.
Mã:
$ cypher-shell -a 'neo4j://ip6-localhost:7687'
cypher-shell
với URI kết nối, bạn sẽ được nhắc nhập tên người dùng và mật khẩu như bình thường.Bước 4 - Cấu hình Truy cập Tường lửa (UFW)
Sau khi bạn đã bật kết nối từ xa, bạn có thể sử dụng tường lửa để hạn chế Neo4j nhằm giới hạn các kết nối chỉ từ các hệ thống đáng tin cậy mà nó có thể kết nối.Neo4j tạo hai ổ cắm mạng, một trên cổng 7474 cho giao diện HTTP tích hợp và giao thức bolt chính trên cổng 7687.
Ubuntu 22.04 sử dụng Tường lửa đơn giản (UFW) bằng mặc định.
Cấu hình tường lửa để cho phép máy chủ từ xa đáng tin cậy truy cập vào giao diện
bolt
bằng IPv4 bằng lệnh sau.
Mã:
$ sudo ufw allow from 203.0.113.1 to any port 7687 proto tcp
203.0.113.1
. Tương tự như vậy, bạn có thể cho phép toàn bộ phạm vi mạng bằng lệnh sau.
Mã:
$ sudo ufw allow from 192.0.2.0/24 to any port 7687 proto tcp
192.0.2.0/24
.Để cho phép truy cập vào máy chủ từ xa bằng IPv6, bạn có thể sử dụng lệnh sau lệnh.
Mã:
$ sudo ufw allow from 2001:DB8::1/128 to any port 7687 proto tcp
2001:DB8::1/128
.Giống như IPv4, bạn có thể cho phép một phạm vi địa chỉ IPv6 bằng cách sử dụng sau lệnh.
Mã:
$ ufw allow from 192.0.2.0/24 to any port 7687 proto tcp
Tải lại tường lửa để áp dụng các thay đổi.
Mã:
$ sudo ufw reload
Mã:
$ sudo ufw status
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
7687/tcp ALLOW 203.0.113.1
Bước 5 - Sử dụng Neo4j
Kết nối với Neo4j bằng công cụcypher-shell
. Bạn sẽ được nhắc nhập tên người dùng và mật khẩu.
Mã:
$ cypher-shell
Mã:
$ cypher-shell -a 'neo4j://203.0.113.1:7687'
203.0.113.1
là địa chỉ IP của máy chủ Neo4j.Nếu bạn đang sử dụng IPv6, hãy đảm bảo rằng bạn có mục
/etc/hosts
có tên được mô tả trong bước 3. Sau đó, kết nối với máy chủ Neo4j dưới dạng theo sau.
Mã:
$ cypher-shell -a 'neo4j://your_hostname:7687'
your_hostname
ánh xạ tới địa chỉ IPv6 của máy chủ Neo4j của bạn trong hệ thống từ xa Tệp /etc/hosts
.Chúng ta hãy thêm một nút có tên là
Slite
và tên tác giả vào Neo4j. Lệnh sau sẽ tạo một nút có kiểu Slite
, với tên Navjot Singh
.
Mã:
neo4j@neo4j> CREATE (:Slite {name: 'Navjot Singh'});
Mã:
0 rows
ready to start consuming query after 124 ms, results consumed after another 0 ms
Added 1 nodes, Set 1 properties, Added 1 labels
COLLEAGUE
. Bạn có thể liên kết các nút với các mối quan hệ được đặt tên tùy ý.Thêm ba nhân viên nữa và liên kết họ bằng mối quan hệ
COLLEAGUE
.
Mã:
neo4j@neo4j> CREATE (:Slite {name: 'Sammy'})-[:COLLEAGUE]-> (:Slite {name: 'Peter Jack'})-[:COLLEAGUE]-> (:Slite {name: 'Chris Rock'});
Mã:
0 rows
ready to start consuming query after 72 ms, results consumed after another 0 ms
Added 3 nodes, Created 2 relationships, Set 3 properties, Added 3 labels
Vì Peter và Chris làm việc trong cùng một phòng ban và có cùng các thuộc tính như các nút, chúng ta sẽ tạo một mối quan hệ với cột tên.
Mã:
neo4j@neo4j> MATCH (a:Slite),(b:Slite) WHERE a.name = 'Peter Jack' AND b.name = 'Chris Rock' CREATE (a)-[r:DEPARTMENT { name: 'Designers' }]->(b) RETURN type(r), r.name;
+----------------------------+
| type(r) | r.name |
+----------------------------+
| "DEPARTMENT" | "Designers" |
+----------------------------+
1 row
ready to start consuming query after 60 ms, results consumed after another 17 ms
Created 1 relationships, Set 1 properties
Mã:
neo4j@neo4j> MATCH (a:Slite), (b:Slite) WHERE a.name = 'Peter Jack' AND b.name = 'Sammy' CREATE (a)-[r:PROJECT { name: 'Test Project 1' }]->(b) RETURN type(r), r.name;
+------------------------------+
| type(r) | r.name |
+------------------------------+
| "PROJECT" | "Test Project 1" |
+------------------------------+
1 row
ready to start consuming query after 132 ms, results consumed after another 12 ms
Created 1 relationships, Set 1 properties
Mã:
neo4j@neo4j> MATCH (a)-[r]->(b) RETURN a.name,r,b.name ORDER BY r;
+-------------------------------------------------------------------+
| a.name | r | b.name |
+-------------------------------------------------------------------+
| "Sammy" | [:COLLEAGUE] | "Peter Jack" |
| "Peter Jack" | [:COLLEAGUE] | "Chris Rock" |
| "Peter Jack" | [:DEPARTMENT {name: "Designers"}] | "Chris Rock" |
| "Peter Jack" | [:PROJECT {name: "Test Project 1"}] | "Sammy" |
+-------------------------------------------------------------------+
4 rows
ready to start consuming query after 99 ms, results consumed after another 5 ms