Last chance! 50% off DataCamp Premium
Sale ends in
संभव है कि आपने रिलेशनल डेटाबेस के बारे में सुना हो या उन पर काम भी किया हो। पंक्ति-तालिका (row-table) प्रारूप सूचनाएँ संग्रहीत करने की सबसे लोकप्रिय और सहज संरचना है। लेकिन दुर्भाग्य से, आपके पास आने वाले सभी डेटा को पंक्तियों और तालिकाओं में संग्रहीत नहीं किया जा सकता। वास्तव में, वास्तविक दुनिया की कई समस्याएँ नॉन-रिलेशनल डेटाबेस की माँग करती हैं। तो क्या विकल्प मौजूद हैं?
उत्तर है—हाँ! ऐसे चार प्रकार के डेटाबेस हैं जिनमें पंक्तियाँ या तालिकाएँ नहीं होतीं। इन्हें NoSQL डेटाबेस कहा जाता है क्योंकि आप इनमें SQL का उपयोग करके क्वेरी नहीं कर सकते। ये हैं:
यह लेख document डेटाबेस पर केंद्रित है और MongoDB नामक सर्वर का उपयोग कैसे करें, यह बताता है। लेकिन तकनीकी विवरण में जाने से पहले, document डेटाबेस के उपयोग के मामलों पर नज़र डालते हैं। इनके बारे में अधिक जानकारी के लिए आप हमारे अलग गाइड graph डेटाबेस भी देख सकते हैं।
Document डेटाबेस चुनने का एक प्रमुख उपयोग-परिदृश्य तब होता है जब आपका डेटा किसी पूर्व-परिभाषित स्कीमा, जैसे तालिकाएँ, में साफ़-सुथरे ढंग से फिट नहीं बैठता। उद्योगों में कई प्रक्रियाएँ या अनुप्रयोग ऐसे ही डेटा संग्रहीत करते हैं। कुछ उदाहरण:
थोड़ा सोचिए कि इन उद्योगों से संकलित डेटा तालिकाओं में कैसे फिट होगा। उदाहरण के लिए, ई-कॉमर्स प्लेटफ़ॉर्म के लिए उत्पाद कैटलॉग को किसी पूर्व-परिभाषित स्कीमा में रखना कठिन होगा। अलग-अलग उत्पादों के गुण अलग होते हैं या, और भी बुरा, गुणों की संख्या अलग-अलग होती है। क्या आपको 100 ब्रांडों के ड्रोन्स के 10 भौतिक गुणों के लिए 10 कॉलम चाहिए या सिर्फ़ 5–6 कॉलम पुस्तकों की जानकारी रखने के लिए?
ऐसे परिदृश्यों में तालिका-आधारित डेटाबेस मदद नहीं कर पाते। MongoDB जैसे document डेटाबेस का उपयोग करके, आपको ये लाभ मिलते हैं:
अब, document डेटाबेस और MongoDB के मुख्य अवधारणाओं को देखते हैं।
अब तक मैंने बार-बार document डेटाबेस कहा है, लेकिन वे वास्तव में हैं क्या? मुख्य अवधारणाएँ इस प्रकार हैं:
यहाँ एक बढ़िया तालिका है जो रिलेशनल और document डेटाबेस के बीच के अंतर का सार प्रस्तुत करती है:
| विशेषता | Document डेटाबेस (उदा., MongoDB) | रिलेशनल डेटाबेस (उदा., MySQL, PostgreSQL) |
|---|---|---|
| डेटा संरचना | डेटा को दस्तावेज़ों (उदा., JSON, BSON) के रूप में संग्रहीत करता है, जो लचीली, पदानुक्रमित संरचनाएँ संभव बनाता है। | पूर्व-परिभाषित स्कीमा का पालन करते हुए, पंक्तियों और स्तंभों वाली तालिकाओं में डेटा संग्रहीत करता है। |
| स्कीमा लचीलापन | Schema-less: दस्तावेज़ों की संरचना भिन्न हो सकती है, जिससे अलग-अलग फ़ील्ड और डेटा प्रकार संभव होते हैं। | स्थिर स्कीमा: विशिष्ट स्तंभों और डेटा प्रकारों के साथ पूर्व-परिभाषित स्कीमा आवश्यक। |
| क्वेरी भाषा | MongoDB Query Language (MQL) या समान, जो ऑब्जेक्ट-आधारित और अधिक लचीला है। | संरचित डेटा पर क्वेरी के लिए SQL (Structured Query Language) का उपयोग करता है। |
| Joins | संबंधित डेटा को दस्तावेज़ों के भीतर समाहित (denormalization) करके joins से बचता है। | तालिकाओं में जटिल joins का समर्थन करता है (normalization)। |
| प्रदर्शन | असंरचित या अर्ध-संरचित डेटा पर तेज़ पढ़ना और लिखना। Joins का ओवरहेड नहीं होता। | संरचित डेटा पर मज़बूत प्रदर्शन, लेकिन joins क्वेरी को धीमा कर सकते हैं। |
| स्केलेबिलिटी | क्षैतिज रूप से स्केलेबल: शार्डिंग द्वारा डेटा को कई सर्वरों में बाँट सकता है। | आमतौर पर ऊर्ध्वाधर स्केलिंग: अधिक शक्तिशाली हार्डवेयर पर निर्भर, हालांकि कुछ में क्षैतिज स्केलिंग (उदा., partitions) का समर्थन है। |
| लेनदेन समर्थन | मल्टी-डॉक्यूमेंट ACID ट्रांज़ैक्शन (MongoDB 4.0 और ऊपर) का समर्थन; मूल रूप से नॉन-ट्रांज़ैक्शनल ऑपरेशंस के लिए डिज़ाइन किया गया था। | ACID-अनुरूप लेनदेन का पूर्ण समर्थन, जो मज़बूत स्थिरता और विश्वसनीयता प्रदान करता है। |
| उपयोग-परिदृश्य | असंरचित/अर्ध-संरचित डेटा जैसे उपयोगकर्ता प्रोफ़ाइल, लॉग, कैटलॉग और लचीली संरचनाओं के लिए उपयुक्त। | स्पष्ट संबंधों वाले संरचित डेटा के लिए आदर्श, जैसे वित्तीय अभिलेख या ERP। |
| डेटा संबंध | समाहित डेटा (denormalization) का समर्थन, जिससे एक ही क्वेरी में संबंधित सूचना पाना आसान हो जाता है। | रिलेशनल डेटाबेस तालिकाओं में संबंध स्थापित करने के लिए foreign keys पर निर्भर रहते हैं (normalization)। |
| इंडेक्सिंग | इंडेक्सिंग का समर्थन करता है, पर इंडेक्स प्रकारों की विविधता और परिष्कार रिलेशनल डेटाबेस जितना नहीं। | मज़बूत इंडेक्सिंग क्षमताएँ; कई इंडेक्स प्रकारों (उदा., B-tree, hash) का समर्थन, बेहतर प्रदर्शन अनुकूलन के लिए। |
| स्थिरता (Consistency) | वितरित सेटअप में eventual consistency प्रदान करता है, पर ज़रूरत होने पर मज़बूत स्थिरता (ACID ट्रांज़ैक्शन द्वारा) भी देता है। | अधिकांश मामलों में ACID ट्रांज़ैक्शन और रिलेशनल इंटेग्रिटी के कारण मज़बूत स्थिरता सुनिश्चित करता है। |
| डेटा वॉल्यूम स्केलिंग | सर्वर जोड़कर (शार्डिंग) बड़े डेटा की मात्रा के अनुसार आसानी से स्केल करता है। | ऊर्ध्वाधर स्केल कर सकता है, लेकिन क्षैतिज स्केलिंग के लिए जटिल कॉन्फ़िगरेशन (उदा., partitioning) चाहिए। |
| डेटा अखंडता | डेटा अखंडता प्रत्येक दस्तावेज़ के भीतर प्रबंधित होती है, पर दस्तावेज़ों के बीच संबंध प्रबंधन कठिन हो सकता है। | प्राइमरी/फॉरेन keys और UNIQUE, NOT NULL जैसी बाधाओं से डेटा अखंडता का मज़बूत अंतर्निहित समर्थन। |
| डेवलपर अनुकूलता | डेवलपर-फ्रेंडली: लचीला डेटा मॉडलिंग, आधुनिक ऐप्स (उदा., JSON, REST APIs) के साथ अच्छा काम करता है। | कठोर डेटा मॉडलिंग, लेकिन SQL और संरचित डेटा से परिचित डेवलपर्स के लिए अच्छी तरह समझा हुआ। |
चलिए, अब MongoDB में दस्तावेज़ों के साथ काम करना शुरू करते हैं!
Document डेटाबेस पर क्वेरी चलाने के लिए, हमें MongoDB सर्वर इंस्टॉल करना होगा। प्लेटफ़ॉर्म-विशिष्ट निर्देश नीचे हैं:
$ sudo apt-get install -y mongodb
इसके बाद, एक वर्चुअल एनवायरनमेंट के भीतर, pymongo और requests लाइब्रेरी इंस्टॉल करें। pymongo MongoDB सर्वर के लिए आधिकारिक Python एडेप्टर है। हमें API से डेटा खींचने के लिए requests लाइब्रेरी की भी आवश्यकता होगी।
$ pip install pymongo
$ pip install requests
इसके बाद, टर्मिनल से निम्न कमांड द्वारा MongoDB सर्विस शुरू करें:
$ sudo service mongodb start
अब, हम document डेटाबेस में कुछ डेटा लोड करने के लिए तैयार हैं। ऐसा करते समय दो परिदृश्य होते हैं:
हम दोनों को कवर करेंगे। पहले, drone_races.json नामक कलेक्शन को लोकल से लोड करते हैं। यह स्निपेट देखें:
import json
from pymongo import MongoClient
# Establish connection to MongoDB
client = MongoClient("localhost", 27017)
# Create a database named "drones"
drones = client["drones"]
# Create a collection named "races"
races = drones["races"]
# Load dataset into MongoDB
with open("data/drone_races.json", "r") as file:
data = json.load(file)
races.insert_many(data)
हमारे लिए दो सबसे महत्वपूर्ण ऑब्जेक्ट हैं drones (एक डेटाबेस) और races (एक कलेक्शन)। अधिकांश फ़ंक्शन और मेथड कलेक्शन से संबंधित होंगे। डेटाबेस ऑब्जेक्ट मुख्यतः कलेक्शन प्रबंधन के लिए उपयोग होते हैं।
अब, वही डेटा API के माध्यम से कैसे लोड करें, देखते हैं। मैंने Mockaroo नामक सेवा से एक API के रूप में जानकारी संग्रहीत की है। यह स्निपेट देखें:
import requests
from pymongo import MongoClient
# Fetch data from the API
api_url = (
"https://my.api.mockaroo.com/drone_race_matches.json?key=6f5a6b50"
)
response = requests.get(api_url)
if response.status_code == 200:
data = response.json() # Get the JSON data from the API
# Establish a connection to MongoDB
client = MongoClient()
# Access or create a specific database
drones = client["drones"]
# Access or create a specific collection within the database
races = drones["races"]
# Insert the fetched data into the MongoDB collection
races.insert_many(data)
else:
print("Failed to fetch data from the API.")
हमने drones document डेटाबेस के races कलेक्शन में कुछ डेटा लोड किया है—या किया है? आइए क्वेरी चलाकर जाँचते हैं!
किसी कलेक्शन में डेटा है या नहीं, यह जानने के लिए हमें अंदर के दस्तावेज़ों की गिनती करनी होगी। इसके लिए हम count_documents मेथड का उपयोग करेंगे:
>>> races.count_documents({})
9040
count_documents को पास की गई खाली डिक्शनरी पर ध्यान दें। MongoDB में उस डिक्शनरी को फ़िल्टर कहा जाता है। ट्यूटोरियल में आगे बढ़ते हुए, हम सीखेंगे कि अलग-अलग प्रकार के फ़िल्टर बनाने के लिए इस डिक्शनरी को कैसे भरें। अभी, हमारे पास कोई फ़िल्टर नहीं है। उपरोक्त कोड SQL में SELECT COUNT(*) FROM table_name के समान है।
हमें 9040 दस्तावेज़ मिले—वाह! अब, कुछ डेटा देखते हैं।
pymongo से एक दस्तावेज़ देखने के लिए हम find_one मेथड का उपयोग कर सकते हैं:
from pprint import pprint
>>> pprint(races.find_one())
{'_id': ObjectId('659d31e9255ec0cf4bab529d'),
'laps': 3,
'league': 'F1 Drones',
'location': {'city': 'Ford',
'country': 'United Kingdom',
'date': 'error: invalid date "2024-10-25"',
'venue': 'Manhattan Seas'},
'name': 'Honorable',
'pilots': {'drone': 'DJI3-old',
'finishing_position': 66,
'name': 'Kariotta Cow',
'qualification_time': 27.39,
'team': 'Sky Crusaders',
'telemetry': {'altitude': 34.3,
'battery_voltage': 12.1,
'speed': 68.3,
'timestamp': 'error: invalid date '
'"2024-10-25T14:09:26Z"'}},
'sponsors': ['Fat Shark', 'DJI', 'Etisalat'],
'weather_conditions': 'snowy'}
इस दस्तावेज़ के फ़ील्ड (keys) पर ध्यान दें। यह एक एकल ड्रोन रेस की जानकारी संग्रहीत करता है और निम्न जैसी सूचनाएँ शामिल हैं:
दस्तावेज़ में एक आवश्यक _id फ़ील्ड भी होता है, जो एक अद्वितीय हैश है।
count_documents हमेशा एक संख्या देता है, लेकिन कई बार हम वह डेटा देखना चाहते हैं जो हमारी क्वेरी से मेल खाता है। इसके लिए, हम find_one के बड़े भाई find का उपयोग कर सकते हैं:
from pprint import pprint
for race in races.find():
pprint(race)
break
{'_id': ObjectId('659d31e9255ec0cf4bab529d'),
'laps': 3,
'league': 'F1 Drones',
'location': {'city': 'Ford',
'country': 'United Kingdom',
'date': 'error: invalid date "2024-10-25"',
'venue': 'Manhattan Seas'},
'name': 'Honorable',
'pilots': {'drone': 'DJI3-old',
'finishing_position': 66,
'name': 'Kariotta Cow',
'qualification_time': 27.39,
'team': 'Sky Crusaders',
'telemetry': {'altitude': 34.3,
'battery_voltage': 12.1,
'speed': 68.3,
'timestamp': 'error: invalid date '
'"2024-10-25T14:09:26Z"'}},
'sponsors': ['Fat Shark', 'DJI', 'Etisalat'],
'weather_conditions': 'snowy'}
find खाली क्वेरी (कोई आर्गुमेंट नहीं) के साथ दस्तावेज़ों को एक-एक करके लौटाता है, पर यह हमारा उद्देश्य नहीं है! हम क्वेरी करना चाहते हैं ताकि अपने डेटा के बारे में रोचक प्रश्नों के उत्तर मिल सकें। यहीं फ़िल्टर दस्तावेज़ काम आते हैं।
सबसे सरल फ़िल्टर से शुरू करते हैं—वे दस्तावेज़ चुनना जहाँ कोई फ़ील्ड किसी मान के बराबर हो। यह इस SQL के समान है:
SELECT *
FROM table_name
WHERE field = value
इसे MongoDB में करते हैं:
criteria = {"sponsors": "Fat Shark"}
fat_shark_races = races.count_documents(criteria)
fat_shark_races
6194
ऊपर, हम उन रेसों का चयन कर रहे हैं जिनके प्रायोजक "Fat Shark" हैं। सिंटैक्स बस एक डिक्शनरी है जो sponsors फ़ील्ड को "Fat Shark" से मैप करती है।
यदि MongoDB क्वेरी भाषा में सामान्य असमानता ऑपरेटर न हों तो वह भाषा ही क्या! यहाँ “less than” ऑपरेटर का उपयोग ऐसे करें:
criteria = {"pilots.qualification_time": {"$lt": 10}}
quick_races = races.count_documents(criteria)
quick_races
3061
उपरोक्त क्वेरी MQL की चार नई विशेषताएँ दिखाती है:
pilots.qualification_time पायलट्स के भीतर नेस्टेड क्वालिफिकेशन टाइम निकालता है।$lt “less than” ऑपरेटर है।तो, इस क्वेरी का परिणाम बताता है कि 3061 मैच ऐसे थे जहाँ किसी एक पायलट का क्वालिफिकेशन टाइम 10 सेकंड से कम था। यह क्वेरी $lt ऑपरेटर से संभव हुई। इसके “भाई-बहन” ये हैं:
$lte: less than or equal$gt: greater than$gte: greater than or equalइनकी सिंटैक्स $lt जैसी ही है।
MQL में $and और $or जैसे लॉजिकल कंडीशनल ऑपरेटर भी होते हैं। पहले $or से शुरू करते हैं।
हम वे रेस प्राप्त करेंगे जिनका स्थान United Kingdom है या जिनके प्रायोजक Etisalat हैं:
criteria = {
"$or": [
{"location.country": "United Kingdom"},
{"sponsors": "Etisalat"},
]
}
>>> races.count_documents(criteria)
6223
फिर से, विस्तृत व्याख्या के लिए Explain code बटन का उपयोग करें।
हमारे मानदंडों से मेल खाते 6223 दस्तावेज़ हैं। एक ही फ़ील्ड के लिए अनेक मानों पर OR लॉजिक लागू करने हेतु हम $in ऑपरेटर का उपयोग कर सकते हैं।
उदाहरण के लिए, खराब मौसम की स्थितियों की जाँच इस तरह कर सकते हैं:
criteria = {
"weather_conditions": {"$in": ["rainy", "snowy", "cloudy"]}
}
>>> races.count_documents(criteria)
5508
यह क्वेरी $or के साथ लिखना कठिन होता। अब, $and पर आते हैं।
इस बार, हम वे रेस ढूँढना चाहते हैं जिनका स्थान Australia है और प्रायोजक Fat Shark। $and के साथ ऐसे करें:
criteria = {
"$and": [
{"location.country": "Australia"},
{"sponsors": "Fat Shark"},
]
}
>>> races.count_documents(criteria)
193
लेकिन व्यवहार में, आप शायद ही $and का इस्तेमाल करेंगे, क्योंकि इसे अधिक सरल तरीके से लिखा जा सकता है:
criteria = {
"location.country": "Australia",
"sponsors": "Fat Shark",
}
races.count_documents(criteria)
193
AND लॉजिकल ऑपरेटर प्राप्त करने के लिए फ़िल्टर डिक्शनरी में और key-value जोड़ दें।
अंत में, $nin ऑपरेटर है, जो non-membership जाँचता है। उदाहरण के लिए, हम वे सभी मैच लौटा सकते हैं जो United States, United Kingdom या Australia में नहीं हुए:
criteria = {
"location.country": {
"$nin": ["United States", "United Kingdom", "Australia"]
}
}
>>> races.count_documents(criteria)
126
इससे केवल United Arab Emirates देश बचता है, तो उपरोक्त क्वेरी वास्तव में ऐसे भी लिखी जा सकती है:
criteria = {"location.country": "United Arab Emirates"}
>>> races.count_documents(criteria)
126
पर बात समझ में आ गई होगी।
Null या अनुपस्थित मानों की जाँच सभी डेटा विश्लेषण कार्यों में सामान्य प्रक्रिया है। इसलिए, MongoDB में इसके लिए एक ऑपरेटर है—$exists। नीचे दो उदाहरण हैं जो जाँचते हैं कि कोई फ़ील्ड मौजूद है या नहीं:
criteria = {"location.district": {"$exists": True}}
>>> races.count_documents(criteria)
0
हम्म, लगता है district फ़ील्ड मौजूद नहीं है। laps फ़ील्ड तो हर दस्तावेज़ में होना चाहिए क्योंकि यह रेस के बारे में मुख्य जानकारी है।
criteria = {"laps": {"$exists": True}}
races.count_documents(criteria)
9040
अपेक्षित रूप से, सभी दस्तावेज़ों में laps फ़ील्ड है। लेकिन वे फ़ील्ड जो मौजूद हैं पर उनका मान null है, उनका क्या? हम यह भी जाँच सकते हैं:
criteria = {"pilots.finishing_position": None}
races.count_documents(criteria)
0
Python के बिल्ट-इन None ऑब्जेक्ट का उपयोग करके, हम किसी भी फ़ील्ड के मान की अनुपस्थिति जाँच सकते हैं।
कुछ उन्नत परिदृश्य भी होते हैं जिनमें null या अस्तित्व जाँच की आवश्यकता पड़ती है। उदाहरण के लिए, आप किसी विशाल nested array के कुछ तत्त्वों के अस्तित्व की जाँच करना चाह सकते हैं।
इसके लिए, हम MQL में array indexing सिंटैक्स का उपयोग कर सकते हैं। जैसे, केवल एक प्रायोजक वाली रेस ढूँढने के लिए हमें sponsors array के दूसरे तत्त्व के अस्तित्व की जाँच करनी होगी:
# Counting starts with 0 as always
criteria = {"sponsors.1": {"$exists": False}}
races.count_documents(criteria)
2929
और यह उतना ही आसान है जितना कि key में इंडेक्स संख्या जोड़ना। तो, हमारे कलेक्शन में लगभग 3000 रेस केवल एक इकाई द्वारा प्रायोजित थीं।
यह array indexing सिंटैक्स केवल $exists के लिए ही नहीं, कई अन्य ऑपरेटरों के साथ भी काम करता है।
ट्यूटोरियल में आख़िर में हम प्रोजेक्शन कवर करेंगे। अभी तक, हमारी क्वेरी के परिणामों में प्रत्येक दस्तावेज़ के हर एक फ़ील्ड शामिल थे। जब आपके दस्तावेज़ों में सैकड़ों फ़ील्ड हों, तो यह आदर्श नहीं है। सोचिए, उन्हें प्रिंट करने पर आउटपुट कितना आँखों को चुभेगा!
तो, केवल इच्छित फ़ील्ड लौटाने के लिए हम प्रोजेक्शन का उपयोग कर सकते हैं। ऐसे करें:
criteria = {"pilots.telemetry.speed": {"$gte": 20}}
projection = {
"sponsors": 1,
"location.country": 1,
"pilots.telemetry.speed": 1,
"pilots.name": 1,
}
fast_pilots = races.find(criteria, projection)
for pilot in fast_pilots:
pprint(pilot)
break
ऊपर के मामले में, हम सामान्य रूप से फ़िल्टर मानदंड लिख रहे हैं, लेकिन इस बार हम चार फ़ील्ड 1 पर सेट करके एक और दस्तावेज़ परिभाषित कर रहे हैं। यदि हम इस projection दस्तावेज़ को find या count_documents के दूसरे आर्गुमेंट के रूप में पास करते हैं, तो आउटपुट में हमें केवल वही फ़ील्ड मिलेंगे जो 1 पर सेट हैं।
{'_id': ObjectId('659d31e9255ec0cf4bab529d'),
'location': {'country': 'United Kingdom'},
'pilots': {'name': 'Kariotta Cow', 'telemetry': {'speed': 68.3}},
'sponsors': ['Fat Shark', 'DJI', 'Etisalat']}
भले ही हमने केवल चार फ़ील्ड चुने, शरारती _id फ़ील्ड भी आ गया। इस व्यवहार को दबाने के लिए, उसे projection डिक्शनरी में 0 पर सेट करें:
criteria = {"pilots.telemetry.speed": {"$gte": 20}}
projection = {
"sponsors": 1,
"location.country": 1,
"pilots.telemetry.speed": 1,
"pilots.name": 1,
"_id": 0,
}
fast_pilots = races.find(criteria, projection)
for pilot in fast_pilots:
pprint(pilot)
break
{'location': {'country': 'United Kingdom'},
'pilots': {'name': 'Kariotta Cow', 'telemetry': {'speed': 68.3}},
'sponsors': ['Fat Shark', 'DJI', 'Etisalat']}
अब दृश्य और साफ़-सुथरा है।
अंत में, कुछ फ़ील्ड छोड़कर बाक़ी सभी लौटाने हेतु, उन फ़ील्ड को 0 पर सेट करें:
projection = {"_id": 0, "league": 0, "pilots": 0}
# Empty criteria for this one
races.find_one({}, projection)
{'name': 'Honorable',
'location': {'venue': 'Manhattan Seas',
'city': 'Ford',
'country': 'United Kingdom',
'date': 'error: invalid date "2024-10-25"'},
'sponsors': ['Fat Shark', 'DJI', 'Etisalat'],
'laps': 3,
'weather_conditions': 'snowy'}
जैसा कि आप देख सकते हैं, इस बार _id, league और pilots को छोड़कर सारे फ़ील्ड लौटे हैं।
यह ट्यूटोरियल डेटाबेस प्रबंधन उपकरण के रूप में MongoDB के विशाल दायरे के साथ पूरा न्याय नहीं करता। आज हमने केवल GET क्वेरियाँ (सूचना प्राप्त करने वाली क्वेरियाँ) कवर कीं, लेकिन MongoDB डेटा विशेषज्ञों को document डेटाबेस में सूचना insert, update या delete करने की भी अनुमति देता है। हमने एक पूरी श्रेणी—aggregations—की क्वेरियाँ भी छोड़ दीं।
ये सभी विषय इस लेख के दायरे से बाहर हैं और इन्हें सीखने के लिए अतिरिक्त संसाधनों की आवश्यकता होती है। क्यों न आप इन्हें देखें:
Document डेटाबेस, जैसे MongoDB, डेटा को दस्तावेज़ों में संग्रहीत करते हैं (अक्सर JSON-जैसे फ़ॉर्मैट में), जो नेस्टेड डेटा संरचनाएँ रख सकते हैं। यह रिलेशनल डेटाबेस से अलग है, जो स्थिर स्कीमा वाली पंक्तियों और तालिकाओं में डेटा संग्रहीत करते हैं। Document डेटाबेस अधिक लचीलापन प्रदान करते हैं क्योंकि स्कीमा डायनेमिक होता है—अर्थात हर दस्तावेज़ में अलग-अलग फ़ील्ड और डेटा प्रकार हो सकते हैं। यही MongoDB को असंरचित या अर्ध-संरचित डेटा के लिए उपयुक्त बनाता है, जबकि रिलेशनल डेटाबेस में पूर्व-परिभाषित स्कीमा आवश्यक होता है।
MongoDB तब लाभकारी है जब आप ऐसे डेटा के साथ काम कर रहे हों जो तालिकाकार संरचना में ठीक से फिट नहीं बैठता। यदि आपके डेटा का स्कीमा लचीला है, डेटा संरचना में बार-बार बदलाव की आशंका है, या आपको बड़े पैमाने पर असंरचित डेटा संभालना है, तो MongoDB का उपयोग करें। यह उन अनुप्रयोगों के लिए भी अच्छा विकल्प है जिन्हें स्केल पर उच्च गति से पढ़ने-लिखने की आवश्यकता होती है, जैसे ई-कॉमर्स, लॉगिंग और कंटेंट मैनेजमेंट सिस्टम।
MongoDB अनेक प्रोग्रामिंग भाषाओं के साथ संगत है, जिनमें Python, Java, JavaScript, Node.js, Go, Ruby और C# शामिल हैं, आधिकारिक ड्राइवर्स और लाइब्रेरी के माध्यम से। Python लाइब्रेरी pymongo का उपयोग डेटा साइंस अनुप्रयोगों में MongoDB के साथ इंटरैक्शन के लिए आम है। MongoDB आधुनिक फ़्रेमवर्क जैसे Django, Flask और Express.js के साथ भी अच्छी तरह समेकित होता है।
MongoDB को क्षैतिज स्केलिंग के लिए शार्डिंग के माध्यम से डिज़ाइन किया गया है, जहाँ बड़े पैमाने पर डेटा को कुशलतापूर्वक प्रबंधित करने हेतु डेटा कई सर्वरों में वितरित किया जाता है। जैसे-जैसे आपका डेटा बढ़ता है, MongoDB लोड को कई मशीनों में बाँट सकता है, जिससे प्रदर्शन और क्षमता बेहतर होती है। यह MongoDB को बड़े डेटा अनुप्रयोगों या तेज़ी से बढ़ते डेटा वॉल्यूम वाले परिदृश्यों के लिए उपयुक्त बनाता है।
हाँ, MongoDB जटिल क्वेरियों को संभाल सकता है, लेकिन इसकी क्वेरी भाषा (MQL, MongoDB Query Language) SQL से काफ़ी अलग है। MongoDB फ़िल्टर, प्रोजेक्शन, लॉजिकल ऑपरेटर्स और एग्रीगेशंस का समर्थन करता है ताकि आप उन्नत क्वेरियाँ चला सकें—डेटा को प्राप्त, फ़िल्टर और ट्रांसफ़ॉर्म कर सकें। हालाँकि, SQL डेटाबेस के विपरीत, MongoDB पारंपरिक तरीके से joins का समर्थन नहीं करता, क्योंकि यह लचीले दस्तावेज़ स्ट्रक्चर में डेटा को डी-नॉर्मलाइज़ करने के लिए डिज़ाइन किया गया है।
MongoDB का उपयोग रियल-टाइम एनालिटिक्स के लिए किया जा सकता है, लेकिन इसका प्रदर्शन काफी हद तक इस पर निर्भर करता है कि डेटा कैसे संरचित और इंडेक्स किया गया है। MongoDB की शक्तिशाली इंडेक्सिंग और एग्रीगेशन फ्रेमवर्क का उपयोग करके, आप रियल-टाइम क्वेरियाँ चला सकते हैं और कुशलतापूर्वक इनसाइट्स जनरेट कर सकते हैं। लेकिन, अधिक जटिल विश्लेषणात्मक कार्यों के लिए, आप MongoDB को Apache Spark जैसे टूल्स के साथ एकीकृत करने या इसके aggregation framework का उपयोग करके बड़े पैमाने पर रियल-टाइम प्रोसेसिंग पर विचार कर सकते हैं।
MongoDB कई सुरक्षा सुविधाएँ प्रदान करता है, जिनमें ऑथेंटिकेशन, ऑथराइज़ेशन (रोल-आधारित एक्सेस कंट्रोल), एन्क्रिप्शन (इन-ट्रांज़िट और एट-रेस्ट) और ऑडिटिंग शामिल हैं। MongoDB का Enterprise Edition अतिरिक्त सुरक्षा विशेषताएँ देता है जैसे LDAP इंटीग्रेशन और Kerberos ऑथेंटिकेशन, जो एंटरप्राइज़-स्तरीय सुरक्षा के लिए हैं। ये सुविधाएँ संवेदनशील डेटा को सुरक्षित रखने और उद्योग विनियमों के अनुरूपता बनाए रखने में सहायक हैं।
हाँ, MongoDB ACID-अनुरूप लेनदेन का समर्थन करता है, विशेषकर संस्करण 4.0 से आगे। यह रिलेशनल डेटाबेस की तरह मल्टी-डॉक्यूमेंट ट्रांज़ैक्शंस की अनुमति देता है, जिससे atomicity, consistency, isolation और durability सुनिश्चित होती है—जब कई दस्तावेज़ों या कलेक्शनों पर ऑपरेशंस शामिल हों। यह MongoDB को उन परिदृश्यों के लिए अधिक उपयुक्त बनाता है जहाँ ट्रांज़ैक्शनल गारंटी आवश्यक हो।
JSON एक मानव-पठनीय फ़ॉर्मैट है जो डेटा को दर्शाने के लिए आमतौर पर उपयोग होता है, जबकि BSON (Binary JSON) MongoDB का स्टोरेज फ़ॉर्मैट है। BSON अधिक कुशल भंडारण और पुनर्प्राप्ति सक्षम करता है और तिथि तथा बाइनरी डेटा जैसे अतिरिक्त डेटा प्रकारों का समर्थन करता है, जिन्हें JSON स्वाभाविक रूप से नहीं संभालता। BSON अतिरिक्त मेटाडेटा भी जोड़ता है, जिससे दस्तावेज़ संग्रहण और पुनर्प्राप्ति के दौरान प्रदर्शन बेहतर होता है।
मैं 2 से अधिक वर्षों के अनुभव वाला डेटा साइंस कंटेंट क्रिएटर हूँ और Medium पर सबसे बड़े फॉलोइंग्स में से एक रखता हूँ। मुझे एआई और एमएल पर विस्तार से लेख लिखना पसंद है, जिसमें हल्का-सा व्यंग्यात्मक अंदाज रहता है—क्योंकि कुछ तो करना पड़ता है ताकि वे कम उबाऊ लगें। मैंने 130 से अधिक लेख और एक DataCamp कोर्स तैयार किया है, और एक और बन रहा है। मेरा कंटेंट 50 लाख से अधिक लोगों ने देखा है, जिनमें से 20 हज़ार लोग Medium और LinkedIn पर फॉलोअर्स बन गए।
आज ही DataCamp पर अपना Non-Relational डेटाबेस सफ़र शुरू करें!
कोर्स
कोर्स
कोर्स