Pengantar
Dalam tutorial ini, kita akan membahas apa itu Neo4j, kegunaannya, dan bagaimana penerapannya. Kami juga akan menginstal dan mengkonfigurasi instalasi di server Ubuntu 20.04. Neo4j adalah database grafis yang digunakan untuk membuat hubungan data. Contoh lain dari database grafis meliputi:
- ArangoDB
- Grakn Inti
- Microsoft SQL Server 2017
- OrientDB
- RedisGraph
Apa itu Neo4j
Neo4j menghubungkan data saat disimpan, memungkinkan kami menjalankan kueri yang tidak pernah kami ketahui atau pikirkan sebelumnya. Sederhananya, Neo4j mencatat hubungan antara node data, sedangkan database relasional konvensional menggunakan kolom dan baris untuk menyimpan data terstruktur. Karena setiap node menyimpan referensi ke semua node lain yang terhubung dengannya, Neo4j dapat mengkodekan dan mengkueri hubungan yang kompleks dengan overhead yang minimal.
Neo Technology adalah pencipta dan pengembang perangkat lunak open-source Neo4j. Perusahaan telah mengembangkannya sejak tahun 2003. Ini ditulis dalam Java dan Scala, dan kode sumbernya tersedia secara gratis di GitHub. Pada 2015, ini dianggap sebagai sistem manajemen basis data grafis yang paling banyak digunakan saat ini. Neo4j menggunakan bahasa kuerinya sendiri yang disebut Cypher, tetapi kueri juga dapat ditulis dalam gaya lain, misalnya, melalui Java API.
Prasyarat
Untuk penginstalan ini, perangkat lunak memerlukan pengaturan dasar berikut.
- RAM 8 GB dan server empat inti. Minimal, penggunaan yang disarankan adalah RAM 1 GB dan server inti tunggal.
- Ubuntu 20.04 OS
- Semua perintah dijalankan sebagai root. Jika Anda adalah pengguna biasa, perintah harus diawali dengan perintah sudo.
Instalasi Neo4j
Tambahkan Repositori
Ubuntu tidak secara resmi mengandung Neo4j dalam repositori paket standar. Kami akan menambahkan sumber paket yang menunjuk ke lokasi repositori Neo4j, lalu tambahkan kunci GPG dari Neo4j untuk verifikasi, lalu instal Neo4j itu sendiri.
Kita mulai dengan memperbarui daftar paket dan paket itu sendiri.
root@host:~# apt update && apt -y upgrade
Tambahkan Perangkat Lunak Tambahan
Pada langkah ini, kita akan menginstal paket tambahan yang diperlukan untuk koneksi HTTPS. Aplikasi ini mungkin sudah terinstal secara default di sistem, tetapi masih perlu diperbarui.
root@host:~# apt install apt-transport-https ca-certificates curl software-properties-common -y
apt-transport-https package memungkinkan penggunaan https melalui manajer paket menggunakan libapt-pkg Perpustakaan. Ini membuat instalasi tetap aman.
Verifikasi Kunci Keamanan
Sekarang kami menambahkan kunci keamanan resmi untuk repositori paket Neo4j. Kunci ini memeriksa dan memverifikasi apa yang Anda instal berasal dari repositori resmi.
root@host:~# curl -fsSL https://debian.neo4j.com/neotechnology.gpg.key | apt-key add -
OK
root@host:~#
Tambahkan Repositori
Tambahkan repositori Neo4j resmi ke daftar manajer paket.
root@host:~# add-apt-repository "deb https://debian.neo4j.com stable 4.1"
Instal Neo4j
Saat menginstal Neo4j dan semua dependensinya, penting untuk dicatat bahwa instalasi akan meminta kita untuk menginstal paket Java agar berfungsi dengan Neo4j. Selama penginstalan, tekan Y. untuk menerima penginstalan perangkat lunak ini. Jika Anda telah menginstal Java, penginstal akan memahami dan melewatkan langkah ini.
root@host:~# apt install neo4j -y
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following package was automatically installed and is no longer required:
libfprint-2-tod1
Use 'sudo apt autoremove' to remove it.
The following additional packages will be installed:
cypher-shell
The following NEW packages will be installed:
cypher-shell neo4j
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 116 MB of archives.
After this operation, 131 MB of additional disk space will be used.
Get:1 https://debian.neo4j.com stable/4.1 amd64 cypher-shell all 4.1.3 [27,1 MB]
Get:2 https://debian.neo4j.com stable/4.1 amd64 neo4j all 1:4.1.5 [88,4 MB]
Fetched 116 MB in 10s (11,1 MB/s)
Preconfiguring packages ...
Selecting previously unselected package cypher-shell.
(Reading database ... 163626 files and directories currently installed.)
Preparing to unpack .../cypher-shell_4.1.3_all.deb ...
Unpacking cypher-shell (4.1.3) ...
Selecting previously unselected package neo4j.
Preparing to unpack .../neo4j_1%3a4.1.5_all.deb ...
Unpacking neo4j (1:4.1.5) ...
Setting up cypher-shell (4.1.3) ...
Setting up neo4j (1:4.1.5) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for systemd (245.4-4ubuntu3.3) ...
root@host:~#
Mulai Layanan Neo4j
Setelah kami menginstalnya, kami harus mengaktifkannya sebagai layanan neo4j.service.
root@host:~# systemctl enable neo4j.service
Synchronizing state of neo4j.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable neo4j
Created symlink /etc/systemd/system/multi-user.target.wants/neo4j.service → /lib/systemd/system/neo4j.service.
root@host:~#
Periksa Status Neo4j
Selanjutnya, kami memverifikasi bahwa semuanya berfungsi seperti yang diharapkan.
root@host:~# systemctl status neo4j.service
neo4j.service - Neo4j Graph Database
Loaded: loaded (/lib/systemd/system/neo4j.service; enabled; vendor preset:>
Active: active (running) since Wed 2020-12-23 20:04:44 +03; 2min 4s ago
Main PID: 4827 (java)
Tasks: 52 (limit: 9489)
Memory: 447.9M
CGroup: /system.slice/neo4j.service
└─4827 /usr/bin/java -cp /var/lib/neo4j/plugins:/etc/neo4j:/usr/sh>
сне 23 20:04:46 host neo4j[4827]: 2020-12-23 17:04:46.101+0000 INFO ======== N>
сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.073+0000 INFO Initializi>
сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.077+0000 INFO Setting up>
сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.077+0000 INFO Creating n>
сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.083+0000 INFO Setting ve>
сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.085+0000 INFO After init>
сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.088+0000 INFO Performing>
сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.197+0000 INFO Bolt enabl>
сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.843+0000 INFO Remote int>
сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.844+0000 INFO Started.
lines 1-19/19 (END)
To exit this screen, press Ctrl + C.
It is important to have the following parameters:
Loaded: loaded (/lib/systemd/system/neo4j.service; enabled; vendor preset:>
Active: active (running) since Wed 2020-12-23 20:04:44 +03; 2min 4s ago
Uji Koneksi DB
Karena kami telah menginstal Neo4j dan memulainya sebagai layanan, sekarang kami akan menguji koneksi database dan mengonfigurasi pengguna admin.
Catatan:Kami menggunakan versi Neo4j Edisi Komunitas gratis. Ini mendukung pekerjaan simultan dengan database yang sama, tetapi tidak termasuk menetapkan peran dan izin kepada pengguna.Bekerja Dengan Neo4j
Untuk berinteraksi dengan database, kami akan meluncurkan utilitas internal yang disebut cypher-shell untuk bekerja dengan Neo4j. Saat pertama kali kita menjalankannya, kita akan diminta memasukkan user dan password. Secara default, nama pengguna adalah neo4j, dan kata sandinya adalah neo4j. Setelah login pertama, Anda akan diminta untuk mengubah kata sandi menjadi salah satu pilihan Anda.
oot@host:~# cypher-shell
username: neo4j
password: *****
Password change required
new password: ********
Connected to Neo4j 4.1.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>
Untuk keluar, gunakan perintah keluar.
neo4j@neo4j> exit
Bye!
root@host:~#
Tambahkan Node
Mari kita siapkan beberapa node sampel dan tentukan hubungan di antara mereka. Terhubung menggunakan Cypher
root@host:~# cypher-shell
username: neo4j
password: ********
Connected to Neo4j 4.1.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>
Selanjutnya, mari tambahkan node bernama Liquidweb dan nama rekan kerja yang bekerja untuk perusahaan ini dengan nama Margaret. Kita dapat melakukannya dengan menggunakan perintah CREATE, dan sintaksnya adalah sebagai berikut.
neo4j@neo4j> CREATE (:Liquidweb {name: 'Margaret'});
0 rows available after 36 ms, consumed after another 0 ms
Added 1 nodes, Set 1 properties, Added 1 labels
neo4j@neo4j>
Tambahkan Pengguna
Mari tambahkan beberapa kolega lagi dan tautkan mereka ke perusahaan tempat mereka bekerja, Liquidweb. Kami akan terhubung menggunakan perintah FRIEND.
neo4j@neo4j> CREATE (:Liquidweb {name: 'John'})-[:FRIEND]->
(:Liquidweb {name: 'Peter'})-[:FRIEND]->
(:Liquidweb {name: 'Chris'});
0 rows available after 38 ms, consumed after another 0 ms
Added 3 nodes, Created 2 relationships, Set 3 properties, Added 3 labels
neo4j@neo4j>
Membuat Hubungan
Karena Peter dan Chris bekerja di departemen yang sama dan memiliki properti yang sama dengan node, kami akan membuat hubungan dengan kolom nama.
neo4j@neo4j> MATCH (a:Liquidweb),(b:Liquidweb)
WHERE a.name = 'Peter' AND b.name = 'Chris'
CREATE (a)-[r:DEPARTMENT { name: 'Developers' }]->(b)
RETURN type(r), r.name;
+------------------------+
| type(r) | r.name |
+------------------------+
| "DEPARTMENT" | "Developers" |
+------------------------+
1 row available after 105 ms, consumed after another 10 ms
Created 1 relationships, Set 1 properties
neo4j@neo4j>
- MATCH - Ini menunjukkan korespondensi node. Dalam hal ini, dalam satu perusahaan Liquidweb
- DI MANA - di antara nilai
- BUAT - buat dan tambahkan
- KEMBALI - Kembali ke pangkalan.
Sekarang buat koneksi antara John dan Chris, meskipun mereka berada di departemen yang berbeda, tetapi mereka mengerjakan proyek yang sama.neo4j@neo4j> MATCH (a:Liquidweb),(b:Liquidweb)
WHERE a.name = 'John' AND b.name = 'Chris'
CREATE (a)-[r:PROJECT { name: 'Cool Project' }]->(b)
RETURN type(r), r.name;
+----------------------------+
| type(r) | r.name |
+----------------------------+
| "PROJECT" | "Cool Project" |
+----------------------------+
1 row available after 48 ms, consumed after another 5 ms
Created 1 relationships, Set 1 properties
neo4j@neo4j>
Info Tampilan
Sekarang kita akan menampilkan semua data ini dan hubungannya menggunakan kueri berikut.
neo4j@neo4j> Match (n)-[r]->(m)
Return n,r,m;
+--------------------------------------------------------------------------------------------------+
| n | r | m |
+--------------------------------------------------------------------------------------------------+
| (:Liquidweb {name: "John"}) | [:FRIEND] | (:Liquidweb {name: "Peter"}) |
| (:Liquidweb {name: "John"}) | [:PROJECT {name: "Cool Project"}] | (:Liquidweb {name: "Chris"}) |
| (:Liquidweb {name: "Peter"}) | [:DEPARTMENT {name: "Developers"}] | (:Liquidweb {name: "Chris"}) |
| (:Liquidweb {name: "Peter"}) | [:FRIEND] | (:Liquidweb {name: "Chris"}) |
+--------------------------------------------------------------------------------------------------+
4 rows available after 17 ms, consumed after another 2 ms
neo4j@neo4j>
Kami menerima data keluaran dengan hubungan FRIEND berikut, yang menunjukkan hubungan dan hubungan data berikut antara DEPARTMENT dan PROJECT.
Untuk keluar dari cypher shell, jalankan perintah exit.
neo4j@neo4j> :exit
Bye!
root@host:~#
Mengatur Koneksi Jarak Jauh Aman ke Neo4j
Kami tidak akan selalu dapat terhubung ke database dari server itu sendiri. Jika kita ingin mengonfigurasi aplikasi untuk menggunakan Neo4j, kita perlu mengonfigurasinya agar terhubung dengan aman ke server lain. Selain itu, kita harus mengonfigurasi firewall untuk membatasi server mana yang dapat dilampirkan ke Neo4j.
Secara default, Neo4j terhubung melalui localhost (127.0.0.1 - localhost - ditujukan untuk menguji aplikasi tanpa bekerja dengan server lain). Juga, pekerjaan Neo4j dari localhost tidak akan terbuka untuk akses publik ke Internet. Hanya pengguna dengan akses ke jaringan lokal yang dapat terhubung ke Neo4j.
Konfigurasi Neo4j
Agar Neo4j dapat terhubung ke server lain, kita perlu mengubah pengaturan file konfigurasi /etc/neo4j/neo4j.conf . Kami akan menggunakan editor nano untuk tugas ini. Ingat, jika Anda bukan root, gunakan perintah sudo.
root@host:~# nano /etc/neo4j/neo4j.conf
root@host:~#
Temukan baris di bagian Konektor jaringan
#dbms.default_listen_address=0.0.0.0
Batalkan komentar pada baris ini dengan menghapus simbol # lalu tekan Ctrl + S dan Ctrl + X untuk menyimpan dan keluar dari editor.
Nilai 0.0.0.0 akan mengikat Neo4j ke semua antarmuka jaringan IPv4 yang tersedia. Anda dapat menempatkan alamat IP atau jaringan tertentu yang digunakan server Anda sebagai jalur data. Anda juga dapat mengonfigurasinya untuk menggunakan antarmuka IPv6, tetapi ada banyak nuansa pengaturan itu. Kami menyarankan Anda membaca dokumentasi di situs web resmi.
Konfigurasikan Firewall untuk Koneksi Jarak Jauh
Untuk mengkonfigurasi perangkat lunak Neo4j untuk koneksi jarak jauh, kita harus mengkonfigurasi firewall. Kami membatasi akses sehingga hanya sistem tepercaya yang dapat terhubung dengannya. Dalam hal ini, kita akan menggunakan firewall default Ubuntu, UFW.
Selanjutnya, kita harus memeriksa untuk melihat apakah firewall diaktifkan. Jika tidak aktif, kita harus mengaktifkannya.
root@host:~# ufw enable
Firewall is active and enabled on system startup
root@host:~#
Neo4j membuat dua soket jaringan saat menginstal perangkat lunak. Satu di port 7474 untuk antarmuka HTTP dan satu lagi untuk protokol utama di port 7687. Neo4j merekomendasikan penggunaan port 7687. Perintah untuk membuka port akan mirip dengan perintah berikut yang digunakan untuk mengizinkan alamat IPv4.
ufw allow from YOUR_IP to any port 7687 proto tcp
YOUR_IP - Use an IP here to provide access permission. If you want to allow access to the entire local network, use the following rule:
ufw allow from 192.168.50.0/16 to any port 7687 proto tcp
Masukkan rentang jaringan spesifik Anda untuk membuka port. Untuk alamat IPv6, perintahnya akan terlihat seperti ini.
ufw allow from fe80::1006:f7a3:b9cc:b0cb to any port 7687 proto tcp
IP di atas digunakan sebagai contoh. Ganti nilai Anda dan tambahkan aturan.
root@host:~# ufw allow from 192.168.50.189 to any port 7687 proto tcp
Rule added
root@host:~#
Mulai Ulang Firewall
Pastikan untuk memulai ulang firewall Anda.
root@host:~# ufw reload
Firewall reloaded
root@host:~#
Verifikasi Koneksi
Sekarang mari kita periksa untuk melihat apakah itu berfungsi dengan benar.
root@host:~# ufw status
Status: active
To Action From
-- ------ ----
7687/tcp ALLOW 192.168.50.189
root@host:~#
Dan dengan itu, kami memiliki server Neo4j yang berfungsi yang siap digunakan dan dikonfigurasi untuk mengizinkan akses pada port 7687.
Kesimpulan
Kami bertemu dengan database grafis Neo4j, mempelajari cara kerjanya dan mengapa dibutuhkan. Siapkan manajer paket dan kemudian instal Neo4j. Selanjutnya, kami memeriksa fungsionalitasnya, masuk ke dalamnya, dan mengubah kata sandinya. Kami mencoba perintah dasar tentang cara membuat tabel, membuat hubungan, dan mengatur node. Pada akhirnya, kami mengonfigurasi koneksi ke IP yang kami butuhkan dan mengonfigurasi firewall untuk keamanan.