परिचय
इस ट्यूटोरियल में, हम देखेंगे कि Neo4j क्या है, इसका उपयोग किस लिए किया जाता है और इसे कैसे लागू किया जाता है। हम उबंटू 20.04 सर्वर पर इंस्टॉलेशन को भी इंस्टॉल और कॉन्फ़िगर करेंगे। Neo4j एक ग्राफिकल डेटाबेस है जिसका उपयोग डेटा संबंध बनाने के लिए किया जाता है। ग्राफिकल डेटाबेस के अन्य उदाहरणों में शामिल हैं:
- अरंगोडीबी
- ग्रैकन कोर
- माइक्रोसॉफ्ट एसक्यूएल सर्वर 2017
- ओरिएंटडीबी
- रेडिसग्राफ
Neo4j क्या है
Neo4j डेटा को स्टोर होने पर जोड़ता है, जिससे हमें उन प्रश्नों को चलाने की अनुमति मिलती है जिन्हें हम पहले कभी नहीं जानते थे या जिनके बारे में सोचा नहीं था। सरल शब्दों में, Neo4j डेटा नोड्स के बीच संबंध को रिकॉर्ड करता है, जबकि पारंपरिक रिलेशनल डेटाबेस संरचित डेटा को संग्रहीत करने के लिए कॉलम और पंक्तियों का उपयोग करते हैं। चूंकि प्रत्येक नोड अन्य सभी नोड्स के संदर्भ संग्रहीत करता है जिससे यह जुड़ा हुआ है, Neo4j न्यूनतम ओवरहेड के साथ जटिल संबंधों को एन्कोड और क्वेरी कर सकता है।
नियो टेक्नोलॉजी ओपन सोर्स सॉफ्टवेयर Neo4j का निर्माता और विकासकर्ता है। कंपनी इसे 2003 से विकसित कर रही है। यह जावा और स्काला में लिखा गया है, और स्रोत कोड GitHub पर स्वतंत्र रूप से उपलब्ध है। 2015 तक, इसे आज उपयोग में सबसे अधिक उपयोग की जाने वाली ग्राफिकल डेटाबेस प्रबंधन प्रणाली माना जाता है। Neo4j अपनी स्वयं की क्वेरी भाषा का उपयोग करता है जिसे Cypher कहा जाता है, लेकिन क्वेरी को अन्य शैलियों में भी लिखा जा सकता है, उदाहरण के लिए, Java API के माध्यम से।
आवश्यकताएं
इस स्थापना के लिए, सॉफ़्टवेयर को निम्न आधारभूत सेटिंग्स की आवश्यकता होती है।
- 8 जीबी रैम और चार-कोर सर्वर। कम से कम, अनुशंसित उपयोग 1 जीबी रैम और सिंगल-कोर सर्वर है।
- उबंटू 20.04 ओएस
- सभी कमांड रूट के रूप में चलाए जाते हैं। यदि आप एक नियमित उपयोगकर्ता हैं, तो कमांड के सामने sudo कमांड होना चाहिए।
Neo4j इंस्टालेशन
रिपॉजिटरी जोड़ें
उबंटू में आधिकारिक तौर पर मानक पैकेज रिपॉजिटरी में Neo4j शामिल नहीं है। हम Neo4j रिपॉजिटरी के स्थान की ओर इशारा करते हुए पैकेज स्रोत जोड़ेंगे, फिर सत्यापन के लिए Neo4j से GPG कुंजी जोड़ेंगे, फिर Neo4j को ही इंस्टॉल करें।
हम पैकेज और पैकेज की सूची को स्वयं अपडेट करके शुरू करते हैं।
root@host:~# apt update && apt -y upgrade
अतिरिक्त सॉफ़्टवेयर जोड़ें
इस चरण में, हम एक अतिरिक्त पैकेज स्थापित करेंगे जो HTTPS कनेक्शन के लिए आवश्यक है। यह एप्लिकेशन सिस्टम पर डिफ़ॉल्ट रूप से पहले से ही स्थापित हो सकता है, लेकिन उन्हें अभी भी अपडेट करने की आवश्यकता है।
root@host:~# apt install apt-transport-https ca-certificates curl software-properties-common -y
उपयुक्त-परिवहन-https पैकेज libapt-pkg . का उपयोग करके पैकेज प्रबंधक के माध्यम से https के उपयोग को सक्षम बनाता है पुस्तकालय। यह इंस्टॉलेशन को सुरक्षित रखता है।
सुरक्षा कुंजी सत्यापित करें
अब हम Neo4j पैकेज रिपॉजिटरी के लिए आधिकारिक सुरक्षा कुंजी जोड़ते हैं। यह कुंजी जाँचती है और सत्यापित करती है कि आप जो स्थापित कर रहे हैं वह आधिकारिक रिपॉजिटरी से है।
root@host:~# curl -fsSL https://debian.neo4j.com/neotechnology.gpg.key | apt-key add -
OK
root@host:~#
रिपॉजिटरी जोड़ें
पैकेज प्रबंधक सूची में आधिकारिक Neo4j भंडार जोड़ें।
root@host:~# add-apt-repository "deb https://debian.neo4j.com stable 4.1"
Neo4j इंस्टॉल करें
Neo4j और इसकी सभी निर्भरताओं को स्थापित करते समय, यह ध्यान रखना आवश्यक है कि स्थापना हमें Neo4j के साथ काम करने के लिए जावा पैकेज स्थापित करने के लिए प्रेरित करेगी। स्थापना के दौरान, इस सॉफ़्टवेयर इंस्टॉल को स्वीकार करने के लिए Y दबाएं। यदि आपके पास जावा स्थापित है, तो इंस्टॉलर समझ जाएगा और इस चरण को छोड़ देगा।
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:~#
Neo4j सेवा प्रारंभ करें
एक बार जब हम इसे स्थापित कर लेते हैं, तो हमें इसे एक 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:~#
Neo4j स्थिति जांचें
इसके बाद, हम सत्यापित करते हैं कि सब कुछ अपेक्षा के अनुरूप काम कर रहा है।
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
डीबी कनेक्शन का परीक्षण करें
चूंकि हमने Neo4j स्थापित किया है और इसे एक सेवा के रूप में शुरू किया है, अब हम डेटाबेस कनेक्शन का परीक्षण करेंगे और व्यवस्थापक उपयोगकर्ता को कॉन्फ़िगर करेंगे।
नोट:हम मुफ़्त, सामुदायिक संस्करण Neo4j संस्करण का उपयोग कर रहे हैं। यह एक ही डेटाबेस के साथ एक साथ काम करने का समर्थन करता है, लेकिन इसमें उपयोगकर्ताओं को भूमिकाएं और अनुमतियां असाइन करना शामिल नहीं है।Neo4j के साथ काम करना
डेटाबेस के साथ बातचीत करने के लिए, हम Neo4j के साथ काम करने के लिए साइबर-शेल नामक आंतरिक उपयोगिता को लॉन्च करेंगे। जब हम इसे पहली बार चलाते हैं, तो हमें एक उपयोगकर्ता और पासवर्ड दर्ज करने के लिए कहा जाएगा। डिफ़ॉल्ट रूप से, उपयोगकर्ता नाम neo4j है, और पासवर्ड neo4j है। पहले लॉगिन के बाद, आपको पासवर्ड को अपनी पसंद में बदलने के लिए कहा जाएगा।
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>
बाहर निकलने के लिए, निकास आदेश का उपयोग करें।
neo4j@neo4j> exit
Bye!
root@host:~#
नोड्स जोड़ें
आइए कुछ नमूना नोड्स सेट करें और उनके बीच संबंधों को परिभाषित करें। साइफर का उपयोग करके कनेक्ट करें
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>
इसके बाद, लिक्विडवेब नामक एक नोड और मार्गरेट नाम से इस कंपनी के लिए काम करने वाले सहयोगियों के नाम जोड़ते हैं। हम इसे CREATE कमांड का उपयोग करके कर सकते हैं, और सिंटैक्स इस प्रकार होगा।
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>
उपयोगकर्ता जोड़ें
आइए कुछ और सहयोगियों को जोड़ें और उन्हें उस कंपनी से लिंक करें जिसके लिए वे काम करते हैं, लिक्विडवेब। हम 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>
संबंध बनाएं
चूंकि पीटर और क्रिस एक ही विभाग में काम करते हैं और नोड्स के समान गुण रखते हैं, इसलिए हम नाम कॉलम के साथ एक संबंध बनाएंगे।
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 - यह नोड्स के पत्राचार को इंगित करता है। इस मामले में, एक कंपनी के भीतर लिक्विडवेब
- कहां - मानों के बीच
- बनाएं - बनाएं और जोड़ें
- वापसी - आधार पर लौटें।
अब जॉन और क्रिस के बीच संबंध बनाएं, हालांकि वे अलग-अलग विभागों में हैं, लेकिन वे एक ही प्रोजेक्ट पर काम कर रहे हैं।
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>
प्रदर्शन जानकारी
अब हम इस सभी डेटा और उनके संबंधों को निम्न क्वेरी का उपयोग करके प्रदर्शित करेंगे।
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>
हमें निम्न मित्र संबंधों के साथ आउटपुट डेटा प्राप्त हुआ, जो संबंध और DEPARTMENT और PROJECT के बीच निम्न डेटा संबंधों को दर्शाता है।
साइफर शेल से बाहर निकलने के लिए, एग्जिट कमांड चलाएँ।
neo4j@neo4j> :exit
Bye!
root@host:~#
Neo4j के लिए एक सुरक्षित रिमोट कनेक्शन सेट करें
हम हमेशा सर्वर से ही डेटाबेस से कनेक्ट नहीं हो पाएंगे। यदि हम Neo4j का उपयोग करने के लिए एप्लिकेशन को कॉन्फ़िगर करना चाहते हैं, तो हमें इसे अन्य सर्वरों से सुरक्षित रूप से कनेक्ट करने के लिए कॉन्फ़िगर करने की आवश्यकता होगी। साथ ही, हमें फ़ायरवॉल को कॉन्फ़िगर करना चाहिए ताकि यह प्रतिबंधित किया जा सके कि कौन से सर्वर Neo4j से जुड़ सकते हैं।
डिफ़ॉल्ट रूप से, Neo4j लोकलहोस्ट के माध्यम से जुड़ता है (127.0.0.1 - लोकलहोस्ट - अन्य सर्वरों के साथ काम किए बिना अनुप्रयोगों के परीक्षण के लिए)। साथ ही, लोकलहोस्ट से Neo4j का काम सार्वजनिक रूप से इंटरनेट तक पहुंच के लिए खुला नहीं होगा। केवल स्थानीय नेटवर्क तक पहुंच वाले उपयोगकर्ता ही Neo4j से जुड़ पाएंगे।
Neo4j कॉन्फ़िगर करें
Neo4j को अन्य सर्वर से कनेक्ट करने के लिए, हमें कॉन्फ़िगरेशन फ़ाइल की सेटिंग बदलने की आवश्यकता है /etc/neo4j/neo4j.conf . हम इस कार्य के लिए नैनो संपादक का उपयोग करेंगे। याद रखें, यदि आप रूट नहीं हैं, तो sudo कमांड का उपयोग करें।
root@host:~# nano /etc/neo4j/neo4j.conf
root@host:~#
नेटवर्क कनेक्टर सेक्शन में लाइन ढूंढें
#dbms.default_listen_address=0.0.0.0
# चिह्न को हटाकर इस लाइन को अनकम्मेंट करें और फिर संपादक को सहेजने और बाहर निकलने के लिए Ctrl + S और Ctrl + X दबाएं।
0.0.0.0 मान Neo4j को सभी उपलब्ध IPv4 नेटवर्क इंटरफेस से बांध देगा। आप एक विशिष्ट आईपी पता या नेटवर्क डाल सकते हैं जिसे आपके सर्वर डेटा पथ के रूप में उपयोग करते हैं। आप इसे IPv6 इंटरफेस का उपयोग करने के लिए कॉन्फ़िगर भी कर सकते हैं, लेकिन उस सेटिंग की कई बारीकियां हैं। हम अनुशंसा करते हैं कि आप आधिकारिक वेबसाइट पर दस्तावेज़ीकरण पढ़ें।
दूरस्थ कनेक्शन के लिए फ़ायरवॉल कॉन्फ़िगर करें
दूरस्थ कनेक्शन के लिए Neo4j सॉफ़्टवेयर को कॉन्फ़िगर करने के लिए, हमें फ़ायरवॉल को कॉन्फ़िगर करना होगा। हम पहुंच को प्रतिबंधित करते हैं ताकि केवल विश्वसनीय सिस्टम ही इससे जुड़ सकें। इस मामले में, हम डिफ़ॉल्ट Ubuntu फ़ायरवॉल, UFW का उपयोग करेंगे।
अगला, हमें यह देखने के लिए जांचना होगा कि फ़ायरवॉल सक्रिय है या नहीं। यदि यह सक्रिय नहीं है, तो हमें इसे सक्षम करना होगा।
root@host:~# ufw enable
Firewall is active and enabled on system startup
root@host:~#
सॉफ़्टवेयर स्थापित करते समय Neo4j दो नेटवर्क सॉकेट बनाता है। एक HTTP इंटरफ़ेस के लिए पोर्ट 7474 पर और दूसरा पोर्ट 7687 पर प्राथमिक प्रोटोकॉल के लिए। Neo4j पोर्ट 7687 का उपयोग करने की अनुशंसा करता है। पोर्ट खोलने का आदेश 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
पोर्ट खोलने के लिए अपनी विशिष्ट नेटवर्क श्रेणी दर्ज करें। IPv6 पते के लिए, कमांड इस तरह दिखेगा।
ufw allow from fe80::1006:f7a3:b9cc:b0cb to any port 7687 proto tcp
उपरोक्त आईपी का उपयोग एक उदाहरण के रूप में किया जाता है। अपने मूल्यों को प्रतिस्थापित करें और एक नियम जोड़ें।
root@host:~# ufw allow from 192.168.50.189 to any port 7687 proto tcp
Rule added
root@host:~#
फ़ायरवॉल पुनरारंभ करें
अपने फ़ायरवॉल को पुनरारंभ करना सुनिश्चित करें।
root@host:~# ufw reload
Firewall reloaded
root@host:~#
कनेक्शन सत्यापित करें
अब देखते हैं कि यह ठीक से काम कर रहा है या नहीं।
root@host:~# ufw status
Status: active
To Action From
-- ------ ----
7687/tcp ALLOW 192.168.50.189
root@host:~#
और इसके साथ, हमारे पास एक कार्यशील Neo4j सर्वर है जो जाने के लिए तैयार है और पोर्ट 7687 पर एक्सेस की अनुमति देने के लिए कॉन्फ़िगर किया गया है।
निष्कर्ष
हमने Neo4j ग्राफिकल डेटाबेस से मुलाकात की, सीखा कि यह कैसे काम करता है और इसकी आवश्यकता क्यों है। एक पैकेज मैनेजर सेट करें और फिर Neo4j इंस्टॉल करें। इसके बाद, हमने कार्यक्षमता की जांच की, उसमें गए, और पासवर्ड बदल दिया। हमने टेबल बनाने, संबंध बनाने और नोड्स सेट करने के तरीके पर बुनियादी आदेशों की कोशिश की। अंत में, हमने अपने लिए आवश्यक आईपी से कनेक्शन को कॉन्फ़िगर किया और सुरक्षा के लिए फ़ायरवॉल को कॉन्फ़िगर किया।