PostgreSQL बनाम MongoDB बनाम Redis: आर्किटेक्चर और सिस्टम डिज़ाइन की गहरी तुलना
हर इंजीनियरिंग टीम को कभी न कभी डेटाबेस चयन के कठिन निर्णय का सामना करना पड़ता है: क्या उन्हें दशकों से परखे गए रिलेशनल इंजन को चुनना चाहिए, एक लचीले डॉक्यूमेंट स्टोर को अपनाना चाहिए, या अत्यधिक तेज़ इन-मेमोरी डेटा स्ट्रक्चर स्टोर का उपयोग करना चाहिए?
उद्योग में इस तुलना को अक्सर “टेबल्स बनाम JSON बनाम की-वैल्यू” कहकर बेहद सरल बना दिया जाता है। लेकिन यह सरलीकरण उन बुनियादी इंजीनियरिंग पहलुओं को छिपा देता है जो वास्तविक उत्पादन में सिस्टम का प्रदर्शन तय करते हैं: स्टोरेज इंजन, मेमोरी हायरार्की, डिस्क I/O पैटर्न, कॉनकरेंसी प्रिमिटिव्स और राइट-अहेड लॉगिंग (WAL) की कार्यप्रणाली।
उच्च-कॉनकरेंसी वाले सिस्टम में गलत डेटाबेस चुनने का परिणाम अत्यधिक हार्डवेयर लागत, मेमोरी लीक्स, डिस्ट्रीब्यूटेड लॉकिंग की समस्याओं और डेटा विसंगतियों के रूप में सामने आता है। यह गाइड PostgreSQL, MongoDB और Redis के आंतरिक आर्किटेक्चर की गहराई से पड़ताल करती है और आधुनिक पॉलीग्लॉट पर्सिस्टेंस का एक व्यावहारिक खाका पेश करती है।
1. मुख्य आर्किटेक्चरल मॉडल
कोड या बेंचमार्क देखने से पहले, तीनों इंजनों के मुख्य संचालन उद्देश्य और आंतरिक डिज़ाइन को समझना ज़रूरी है:
| पैमाना | PostgreSQL | MongoDB | Redis |
|---|---|---|---|
| मुख्य प्रतिमान (Paradigm) | रिलेशनल और ऑब्जेक्ट-रिलेशनल (RDBMS) | डॉक्यूमेंट स्टोर (डिस्ट्रीब्यूटेड NoSQL) | इन-मेमोरी डेटा स्ट्रक्चर स्टोर |
| मुख्य डेटा इकाई | 8KB पेजों में व्यवस्थित टुपल्स (Tuples) | कलेक्शन्स के अंदर BSON डॉक्यूमेंट्स | टाइप्ड डेटा स्ट्रक्चर्स से जुड़ी इन-मेमोरी कीज़ |
| स्टोरेज इंजन | हीप टेबल्स + बफ़र पूल + WAL | WiredTiger (B-Tree + जर्नल) | इन-मेमोरी (RAM) + वैकल्पिक RDB / AOF |
| कॉनकरेंसी मॉडल | मल्टी-वर्ज़न कॉनकरेंसी कंट्रोल (MVCC) | डॉक्यूमेंट-स्तरीय कॉनकरेंसी + MVCC | सिंगल-थ्रेडेड इवेंट लूप (रिएक्टर पैटर्न) |
| औसत लेटेंसी प्रोफ़ाइल | 1ms – 15ms (डिस्क / Shared Buffers) | 1ms – 8ms (WiredTiger कैश / NVMe) | 100µs – 800µs (सीधा DRAM एक्सेस) |
| डेटा टिकाऊपन (Durability) | सख्त ACID (सिंक्रोनस WAL फ्लश) | ट्यूनेबल ACID (जर्नलिंग + राइट कंसर्न) | कॉन्फ़िगरेबल (AOF fsync / RDB स्नैपशॉट) |
2. स्टोरेज इंजन और मेमोरी की आंतरिक कार्यप्रणाली
कोई इंजन मेमोरी को कैसे व्यवस्थित करता है और डिस्क पर बाइट्स को कैसे लिखता है, इसी से उसकी थ्रूपुट क्षमता और क्रैश रिकवरी तय होती है।
PostgreSQL: स्लॉटेड पेज, शेयर्ड बफ़र्स और हीप
PostgreSQL टेबल डेटा को डिस्क पर 8KB के निश्चित पेजों (slotted pages) में स्टोर करता है:
- शेयर्ड बफ़र्स (
shared_buffers): PostgreSQL सीधे ऑपरेटिंग सिस्टम पर निर्भर रहने के बजाय मेमोरी में पेजों का अपना कैश प्रबंधित करता है। रीड रिक्वेस्ट पहलेshared_buffersकी जाँच करती है; यदि पेज वहाँ नहीं है, तो कर्नेल उसे OS पेज कैश में और फिर PostgreSQL की मेमोरी में लोड करता है। - राइट-अहेड लॉगिंग (WAL): जब कोई ट्रांज़ैक्शन कमिट होता है, तो PostgreSQL उन बदलावों को क्रमिक रूप से WAL बफ़र में लिखता है और हीप में पेजों को बदलने से पहले डिस्क पर सिंक करता है। यह सिस्टम क्रैश होने पर रिकवरी और स्ट्रीमिंग रेप्लिकेशन को सुरक्षित बनाता है।
- MVCC और ब्लोट (Bloat) प्रबंधन: PostgreSQL हर अपडेट या डिलीट पर पंक्ति का एक नया वर्ज़न (
tuple) बनाकर MVCC लागू करता है, जिस परxminऔरxmaxट्रांज़ैक्शन आईडी दर्ज होती हैं। क्योंकि पुराने टुपल्स 8KB पेजों में जगह घेरे रहते हैं, बैकग्राउंड में चलने वालेVACUUMऔर autovacuum प्रोसेस जगह खाली करते हैं और ट्रांज़ैक्शन आईडी रैप-अराउंड से बचाते हैं। - इंडेक्सिंग प्रिमिटिव्स: यह कई प्रकार के इंडेक्स सपोर्ट करता है: B-Tree (डिफ़ॉल्ट), GIN (जनरलाइज्ड इनवर्टेड इंडेक्स,
JSONBके अंदर नेस्टेड कीज़ खोजने के लिए अनिवार्य), GiST (जियोमेट्रिक और फुल-टेक्स्ट सर्च के लिए), और BRIN (ब्लॉक रेंज इंडेक्स, बड़े सीक्वेंशियल टाइम-सीरीज़ डेटा के लिए)।
MongoDB: WiredTiger, BSON और कंप्रेस्ड कैशिंग
MongoDB अपने आधुनिक WiredTiger स्टोरेज इंजन का उपयोग करता है:
- मेमोरी आवंटन: डिफ़ॉल्ट रूप से, WiredTiger अपने आंतरिक कैश के लिए
50% of (RAM - 1GB)आरक्षित करता है। बाकी RAM जानबूझकर ऑपरेटिंग सिस्टम के पेज कैश के लिए छोड़ दी जाती है ताकि कंप्रेस्ड डिस्क ब्लॉक्स को रखा जा सके। - कैश और कंप्रेशन: डिस्क पर डेटा Snappy (CPU-अनुकूलित) या zlib (अधिकतम कंप्रेशन) का उपयोग करके स्टोर होता है। WiredTiger इन ब्लॉक्स को अनकंप्रेस्ड BSON संरचनाओं के रूप में अपने वर्किंग कैश में लोड करता है।
- चेकपॉइंट्स और जर्नल: WiredTiger हर 60 सेकंड में मेमोरी की स्थिति को डिस्क पर चेकपॉइंट के रूप में लिखता है। चेकपॉइंट्स के बीच डेटा सुरक्षा बनाए रखने के लिए बदलावों को अपेंड-ओनली जर्नल में दर्ज किया जाता है (डिफ़ॉल्ट रूप से हर 100ms में या
w: "majority"औरj: trueके साथ तुरंत)। - डॉक्यूमेंट मॉडल की सीमाएँ: डेटा BSON (बाइनरी JSON) में स्टोर होता है, जिसमें 64-बिट इंटीजर्स, डेट्स और
ObjectIdजैसे डेटा प्रकार नेटिव होते हैं। एक BSON डॉक्यूमेंट का अधिकतम आकार 16MB निर्धारित है ताकि मेमोरी ओवरहेड और लॉकिंग से बचा जा सके।
Redis: इन-मेमोरी रिएक्टर, jemalloc और पर्सिस्टेंट लॉग्स
Redis का दृष्टिकोण बिल्कुल अलग है: मुख्य स्टोरेज सीधे RAM में होता है, जिससे डिस्क सीक टाइम पूरी तरह खत्म हो जाता है।
- सिंगल-थ्रेडेड निष्पादन: Redis I/O मल्टीप्लेक्सिंग (
epoll/kqueue) पर आधारित सिंगल-थ्रेडेड इवेंट लूप का उपयोग करता है। चूँकि सभी कमांड्स बिना किसी थ्रेड कॉन्टेक्स्ट स्विचिंग या लॉक विवाद के क्रमिक रूप से चलते हैं, इसलिए संचालन सब-मिलीसेकंड गति से पूरा होता है। यद्यपि Redis 6.0 ने सॉकेट I/O के लिए मल्टी-थ्रेडिंग जोड़ी है, मुख्य कमांड निष्पादन इंजन अभी भी सिंगल-थ्रेडेड है। - मेमोरी एलोकेटर: Redis मेमोरी फ्रैग्मेंटेशन को कम करने के लिए
jemallocका उपयोग करता है। जब RAMmaxmemoryसीमा तक पहुँच जाती है, तो यहvolatile-lru,allkeys-lru,volatile-lfuजैसी एविक्शन नीतियां लागू करता है। - पर्सिस्टेंस तंत्र:
- RDB (Redis Database):
bgsaveद्वारा एक निश्चित समय पर बाइनरी स्नैपशॉट बनाता है। Redis ऑपरेटिंग सिस्टम के Copy-on-Write (COW) का उपयोग करके एक चाइल्ड प्रोसेस बनाता है, जो क्लाइंट कमांड्स को रोके बिना.rdbफ़ाइल लिखता है। - AOF (Append-Only File): डेटा बदलने वाले हर कमांड को लॉग करता है। डिस्क सिंक की आवृत्ति सेट की जा सकती है:
appendfsync always(अधिकतम सुरक्षा),appendfsync everysec(उत्पादन मानक: अधिकतम 1 सेकंड का डेटा नुकसान जोखिम), याappendfsync no।
- RDB (Redis Database):
3. डेटा मॉडलिंग और क्वेरी उदाहरण
यह समझने के लिए कि तीनों सिस्टम कैसे काम करते हैं, आइए एक व्यावहारिक उदाहरण देखें: एक ऑर्डर (Order) जिसमें ग्राहक आईडी, स्थिति और ऑर्डर किए गए उत्पाद शामिल हैं।
PostgreSQL: रिलेशनल नॉर्मलाइज़ेशन + हाइब्रिड JSONB
PostgreSQL सख्त रिलेशनल नियमों और लचीले सेमी-स्ट्रक्चर्ड डेटा दोनों की सुविधा देता है:
-- सामान्यीकृत रिलेशनल संरचना
CREATE TABLE orders (
id BIGSERIAL PRIMARY KEY,
customer_id BIGINT NOT NULL REFERENCES customers(id),
status VARCHAR(32) NOT NULL DEFAULT 'pending',
total_amount NUMERIC(12, 2) NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE order_items (
id BIGSERIAL PRIMARY KEY,
order_id BIGINT NOT NULL REFERENCES orders(id) ON DELETE CASCADE,
sku VARCHAR(64) NOT NULL,
quantity INTEGER NOT NULL CHECK (quantity > 0),
unit_price NUMERIC(10, 2) NOT NULL
);
-- JSONB और GIN इंडेक्स का हाइब्रिड दृष्टिकोण
CREATE TABLE order_events (
id BIGSERIAL PRIMARY KEY,
payload JSONB NOT NULL,
recorded_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX idx_order_events_payload ON order_events USING GIN (payload jsonb_path_ops);
-- कंटेनमेंट ऑपरेटर (@>) के साथ JSONB क्वेरी
SELECT id, payload->>'customer_id' AS customer
FROM order_events
WHERE payload @> '{"status": "paid", "currency": "USD"}';
मुख्य निष्कर्ष: PostgreSQL फ़ॉरेन की कंस्ट्रेंट्स, कैस्केडिंग डिलीट और NUMERIC के साथ वित्तीय सटीकता लागू करता है। जहाँ लचीलापन चाहिए, वहाँ JSONB बिना ACID गारंटी छोड़े डॉक्यूमेंट की सुविधा देता है।
MongoDB: एम्बेडेड डॉक्यूमेंट और एग्रीगेशन पाइपलाइन
MongoDB में, ऑर्डर के आइटम्स सीधे मूल डॉक्यूमेंट में एम्बेड होते हैं, जिससे जॉइन (JOIN) की आवश्यकता नहीं पड़ती:
// MongoDB में एम्बेडेड डॉक्यूमेंट इंसर्ट करना
db.orders.insertOne({
customerId: ObjectId("66e1f0c29a1b2c3d4e5f6789"),
status: "paid",
totalAmount: 149.50,
items: [
{ sku: "KEYBOARD-MECH-01", qty: 1, price: 109.50 },
{ sku: "USB-C-CABLE-2M", qty: 2, price: 20.00 }
],
metadata: { source: "mobile_app", channel: "organic" },
createdAt: new Date()
});
// एग्रीगेशन पाइपलाइन द्वारा विश्लेषणात्मक क्वेरी ($match, $unwind, $group)
db.orders.aggregate([
{ $match: { status: "paid" } },
{ $unwind: "$items" },
{ $group: {
_id: "$items.sku",
totalQuantitySold: { $sum: "$items.qty" },
revenue: { $sum: { $multiply: ["$items.qty", "$items.price"] } }
}},
{ $sort: { revenue: -1 } },
{ $limit: 10 }
]);
मुख्य निष्कर्ष: एम्बेडेड डॉक्यूमेंट्स पूरे रिकॉर्ड को एक बार में पढ़ने के लिए तेज़ होते हैं। लेकिन जटिल बहु-कलेक्शन रिपोर्टिंग के लिए एग्रीगेशन पाइपलाइन की आवश्यकता होती है, और स्कीमा की ज़िम्मेदारी एप्लिकेशन कोड पर आ जाती है।
Redis: प्रिमिटिव स्ट्रक्चर्स और की-वैल्यू एक्सेस
Redis में टेबल या डॉक्यूमेंट कलेक्शन्स नहीं होते; डेटा मॉडल नेटिव प्रिमिटिव्स से बनता है:
# फ़ील्ड-स्तरीय एक्सेस के लिए ऑर्डर को Hash में सेव करना
HSET order:1001 customer_id "98234" status "paid" total_amount "149.50"
# माइक्रोसेकंड समय में स्थिति पढ़ना
HGET order:1001 status
# ग्राहक की टाइमलाइन में जोड़ना (टाइमस्टैम्प द्वारा Sorted Set)
ZADD customer:98234:orders 1760342400 "order:1001"
# ग्राहक के 10 सबसे हालिया ऑर्डर आईडी प्राप्त करना
ZREVRANGE customer:98234:orders 0 9
# स्टॉक में सुरक्षित रूप से एक संख्या घटाना (O(1))
DECRBY inventory:KEYBOARD-MECH-01 1
मुख्य निष्कर्ष: Redis में डेवलपर को सॉर्टेड सेट्स (ZSET), सेट्स (SET) और हैश (HSET) का उपयोग करके मैन्युअल रूप से इंडेक्सिंग डिज़ाइन करनी होती है। यह सीधे मेमोरी लुकअप के लिए बेजोड़ है।
4. ACID, ट्रांज़ैक्शन और CAP प्रमेय
तीनों प्रणालियों के बीच सबसे बड़ा अंतर इस बात में है कि वे नेटवर्क पार्टिशन, कॉनकरेंसी विवाद और आइसोलेशन स्तरों को कैसे संभालते हैं।
कंसिस्टेंसी (C)
/\
/ \
/ \
/ CA \
/ \
PostgreSQL --/----------\-- MongoDB (डिफ़ॉल्ट रूप से CP)
/ \
/ \
/________________\
उपलब्धता (A) AP पार्टिशन टॉलरेंस (P)
\ /
\-- Redis ---/ (रेप्लिकेशन में AP झुकाव)
PostgreSQL: पूर्ण ACID और ANSI आइसोलेशन स्तर
PostgreSQL कई टेबल्स में फैले ट्रांज़ैक्शंस के लिए अचूक गारंटी प्रदान करता है:
- समर्थित आइसोलेशन स्तर: Read Committed (डिफ़ॉल्ट), Repeatable Read, और Serializable।
- सीरियलाइज़ेबल स्नैपशॉट आइसोलेशन (SSI): पूरी टेबल को लॉक किए बिना रीड-राइट टकरावों को पहचानता है और सीरियलाइज़ेशन विसंगतियों (write skew) को रोकने के लिए परस्पर विरोधी ट्रांज़ैक्शन को निरस्त कर देता है।
- प्राथमिक नोड पर अखंडता: प्राइमरी इंस्टेंस के भीतर डेटा की अखंडता शत-प्रतिशत सुनिश्चित रहती है। रीड रेप्लिकास पर डेटा इवेंचुअल कंसिस्टेंसी के तहत सिंक होता है जब तक कि सिंक्रोनस रेप्लिकेशन लागू न किया जाए।
MongoDB: डॉक्यूमेंट एटॉमिसीटी से डिस्ट्रीब्यूटेड 2PC तक
- एकल डॉक्यूमेंट में एटॉमिसीटी: किसी एक डॉक्यूमेंट में किया गया बदलाव हमेशा एटॉमिक होता है, भले ही उसमें कई नेस्टेड एरेज़ या ऑब्जेक्ट्स बदले जा रहे हों।
- मल्टी-डॉक्यूमेंट ट्रांज़ैक्शन: MongoDB 4.0 और 4.2 में पेश किए गए मल्टी-डॉक्यूमेंट ट्रांज़ैक्शन स्नैपशॉट आइसोलेशन और टू-फेज़ कमिट (2PC) प्रोटोकॉल का उपयोग करते हैं।
- ट्यूनेबल कंसिस्टेंसी: आप प्रति क्वेरी CAP संतुलन तय कर सकते हैं:
writeConcern: { w: "majority", j: true, wtimeout: 5000 }सुनिश्चित करता है कि क्लाइंट को उत्तर देने से पहले डेटा बहुसंख्यक रेप्लिकास पर लिखा जा चुका है।readConcern: "linearizable"नेटवर्क पार्टिशन के दौरान बासी या गलत डेटा पढ़ने से बचाता है।
Redis: इवेंट लूप और ऑप्टिमिस्टिक लॉकिंग द्वारा एटॉमिसीटी
- एकल कमांड की एटॉमिसीटी: सिंगल-थ्रेडेड निष्पादन के कारण
INCR,HSETऔरLPUSHबिना किसी लॉक के स्वाभाविक रूप से एटॉमिक होते हैं। MULTI/EXECब्लॉक्स: कई कमांड्स को एक पाइपलाइन में बाँधकर बिना किसी अन्य क्लाइंट के हस्तक्षेप के निष्पादित करते हैं। ध्यान दें: यदि किसी गलत डेटा टाइप के कारण एक कमांड विफल होता है, तो Redis स्वचालित रोलबैक नहीं करता; बाकी कमांड्स निष्पादित होते रहते हैं।WATCHके साथ ऑप्टिमिस्टिक लॉकिंग: चेक-एंड-सेट (CAS) संचालन की सुविधा:WATCH balance:khata_a # एप्लिकेशन में बैलेंस जांचें... MULTI DECRBY balance:khata_a 50 INCRBY balance:khata_b 50 EXEC # यदि बीच में किसी अन्य क्लाइंट ने balance:khata_a बदला तो nil लौटाएगा- Lua स्क्रिप्ट्स और Redis फंक्शन्स: जटिल ट्रांज़ैक्शनल लॉजिक को सर्वर पर एटॉमिक रूप से चलाने के लिए
EVALया Redis Functions का उपयोग किया जाता है।
5. लेटेंसी, थ्रूपुट और स्केलिंग रणनीतियाँ
डेटाबेस का प्रदर्शन हमेशा भौतिक हार्डवेयर की सीमाओं से बंधा होता है: CPU कैश, DRAM बस की चौड़ाई, NVMe डिस्क IOPS और नेटवर्क लेटेंसी।
वर्कलोड के तहत लेटेंसी तुलना
Redis (DRAM) : [0.1ms - 0.8ms] 🚀
MongoDB (WiredTiger): [1.0ms - 5.0ms] ⚡
PostgreSQL (NVMe) : [1.5ms - 12.0ms] 🛡️
- Redis: लेटेंसी माइक्रोसेकंड में मापी जाती है। मेमोरी लुकअप नैनोसेकंड में पूरा होता है, और कुल समय केवल नेटवर्क स्टैक (0.2ms – 0.8ms) पर निर्भर करता है। एक अकेला Redis इंस्टेंस प्रति कोर 1,00,000 से 5,00,000 ऑपरेशन्स प्रति सेकंड आसानी से प्रोसेस कर सकता है।
- MongoDB: रैम में मौजूद हॉट डेटा पर इंडेक्स्ड रीड्स 1ms – 5ms में पूरे होते हैं। राइट थ्रूपुट को शार्ड्स जोड़कर क्षैतिज रूप से बढ़ाया जा सकता है।
- PostgreSQL:
shared_buffersमें कैश्ड B-Tree इंडेक्स पर पॉइंट लुकअप 1ms – 4ms लेते हैं। कई टेबल्स के जॉइन और विंडो फ़ंक्शन्स वाली जटिल क्वेरीज़ 10ms – 100ms+ ले सकती हैं।
स्केलिंग की सीमाएँ
- PostgreSQL स्केलिंग:
- वर्टिकल: मुख्य सर्वर के CPU और RAM को बढ़ाना।
- रीड स्केलिंग: स्ट्रीमिंग रेप्लिकेशन द्वारा रीड रेप्लिका तैयार करना।
- कनेक्शन स्केलिंग: PostgreSQL के प्रोसेस-प्रति-कनेक्शन ओवरहेड को संभालने के लिए PgBouncer या Odyssey जैसे कनेक्शन पूलर्स का उपयोग अनिवार्य है।
- हॉरिजॉन्टल शार्डिंग: डिफ़ॉल्ट रूप से जटिल; इसके लिए Citus जैसे एक्सटेंशन या एप्लिकेशन-स्तरीय विभाजन की आवश्यकता होती है।
- MongoDB स्केलिंग:
- नेटिव शार्डिंग: शुरुआत से ही क्षैतिज स्केलिंग के लिए डिज़ाइन किया गया है। इसमें
mongosक्वेरी राउटर्स, कॉन्फ़िग सर्वर रेप्लिका सेट, और डेटा शार्ड्स शामिल होते हैं।
- नेटिव शार्डिंग: शुरुआत से ही क्षैतिज स्केलिंग के लिए डिज़ाइन किया गया है। इसमें
- Redis स्केलिंग:
- Redis Cluster: डेटा को स्वचालित रूप से 16,384 हैश स्लॉट्स में विभाजित करता है।
- मेमोरी लागत: मुख्य सीमा RAM की कीमत है। Redis RAM में 10TB डेटा रखना PostgreSQL या MongoDB में 10TB NVMe स्टोरेज रखने की तुलना में 15 से 30 गुना अधिक महंगा होता है।
6. आर्किटेक्ट डिसीजन मैट्रिक्स
अपने वर्कलोड के अनुसार सही इंजन चुनने के लिए इस तालिका का उपयोग करें:
| आवश्यकता / परिदृश्य | अनुशंसित डेटाबेस | मुख्य तकनीकी कारण |
|---|---|---|
| वित्तीय लेजर, भुगतान और बिलिंग | PostgreSQL | सख्त ACID, टेबल कंस्ट्रेंट्स, फॉरेन कीज़, सटीक दशमलव गणना और शून्य डेटा हानि। |
| यूज़र ऑथेंटिकेशन और कोर रिलेशनल डेटा | PostgreSQL | संरचित संबंध, परमिशन ग्राफ्स और ऑडिट अनुपालन। |
| ई-कॉमर्स के गतिशील प्रोडक्ट कैटलॉग | MongoDB | लाखों उत्पादों में बार-बार DDL माइग्रेशन के बिना बदलते हुए पॉलीमॉर्फिक एट्रिब्यूट्स। |
| सत्र प्रबंधन और टोकन ब्लैकलिस्ट | Redis | माइक्रोसेकंड लेटेंसी, ऑटोमैटिक TTL एक्सपायरी और डिस्क बॉटलनेक का अभाव। |
| डिस्ट्रीब्यूटेड रेट लिमिटिंग (Token Bucket) | Redis | एटॉमिक INCR और EXPIRE प्रिमिटिव्स या उच्च-थ्रूपुट गेटवे पर Lua स्क्रिप्ट्स। |
| रियल-टाइम लीडरबोर्ड और स्कोर रैंकिंग | Redis | सॉर्टेड सेट्स (ZADD, ZRANK) $O(\log N)$ समय में रैंकिंग की गणना करते हैं। |
| IoT टेलीमेट्री डेटा इनजेशन (1 लाख राइट्स/सेकंड) | MongoDB / Redis | बफ़रिंग के लिए Redis या ऑटोमैटिक बकेटिंग वाली MongoDB टाइम-सीरीज़ कलेक्शन्स। |
| जटिल रिपोर्टिंग और विश्लेषणात्मक क्वेरीज़ | PostgreSQL | परिपक्व SQL ऑप्टिमाइज़र, विंडो फ़ंक्शन्स (ROW_NUMBER(), RANK()), CTEs और पैरेलल क्वेरी। |
7. प्रोडक्शन ब्लूप्रिंट: 3-लेयर पॉलीग्लॉट पर्सिस्टेंस आर्किटेक्चर
उच्च-ट्रैफ़िक वाले आधुनिक सिस्टम (जैसे Stripe, Shopify और Uber) किसी एक डेटाबेस पर निर्भर नहीं रहते। वे तीनों को मिलाकर एक पॉलीग्लॉट पर्सिस्टेंस आर्किटेक्चर तैयार करते हैं:
क्लाइंट रिक्वेस्ट
│
▼
┌───────────────────┐
│ API Gateway / LB │
└─────────┬─────────┘
│
1. रेट लिमिट और सत्र प्रमाणीकरण
│
▼
┌─────────────────┐
│ Redis कैश │
│ (Tokens / TTL) │
└────────┬────────┘
│
▼
┌───────────────────┐
│ एप्लिकेशन कोर │
└────┬────────────┬─┘
│ │
2. वित्तीय ट्रांज़ैक्शन /│ │ 3. गतिशील कैटलॉग /
सख्त रिलेशनल डेटा │ │ इवेंट लॉग्स
▼ ▼
┌────────────┐ ┌────────────┐
│ PostgreSQL │ │ MongoDB │
│ (SSOT) │ │ (कैटलॉग) │
└────────────┘ └────────────┘
प्रोडक्शन स्टैक में घटकों की भूमिका:
- Redis (एक्सेलेरेशन और बाउंड्री लेयर):
- टोकन बकेट एल्गोरिदम द्वारा API रेट लिमिटिंग संभालता है।
- यूज़र सेशन, JWT ब्लैकलिस्ट्स और WebSocket उपस्थिति ट्रैक करता है।
- भारी PostgreSQL क्वेरी परिणामों के लिए Cache-Aside लेयर का काम करता है (TTL और इवेंट-आधारित इनवैलिडेशन के साथ)।
- PostgreSQL (सिंगल सोर्स ऑफ़ ट्रुथ - SSOT):
- कोर बिजनेस डेटा रखता है: यूज़र्स, इनवॉइस, सब्सक्रिप्शन, ऑर्डर्स और लेजर्स।
- सख्त रिलेशनल नियम लागू करता है ताकि बिना वैध ग्राहक के कोई अनाथ ऑर्डर न बने।
- तीसरे पक्ष के वेबहुक पेलोड्स को स्टोर करने के लिए
JSONBका उपयोग करता है।
- MongoDB (स्पेशलाइज्ड डॉक्यूमेंट लेयर):
- हेटेरोजेनस प्रोडक्ट कैटलॉग प्रबंधित करता है जहाँ विभिन्न श्रेणियों को अलग-अलग एट्रिब्यूट्स की आवश्यकता होती है।
- उच्च-मात्रा वाले ऑडिट लॉग्स और इवेंट्स को स्टोर करता है जहाँ पहले दिन से ही हॉरिज़ॉन्टल शार्डिंग आवश्यक होती है।
निष्कर्ष
कोई भी डेटाबेस “हर मर्ज की दवा” नहीं है।
- PostgreSQL को अपना मुख्य डिफ़ॉल्ट रिलेशनल इंजन बनाएँ। इसका दृढ़ ACID इंजन, PgBouncer और pgvector जैसे एक्सटेंशन्स, और नेटिव
JSONBअधिकांश ज़रूरतों को बिना अतिरिक्त सिस्टम जटिलता के पूरा करते हैं। - जब भी आपको सब-मिलीसेकंड लेटेंसी, डिस्ट्रीब्यूटेड कैशिंग, या एटॉमिक रेट लिमिटिंग की आवश्यकता हो, PostgreSQL के साथ Redis जोड़ें।
- जब आपके डेटा का स्वरूप स्वाभाविक रूप से गतिशील हो या भारी राइट वॉल्यूम के लिए नेटिव क्लस्टर शार्डिंग अनिवार्य हो, तब MongoDB अपनाएँ।
स्कीमा डिज़ाइन, टेबल्स के बीच संबंध और क्वेरी ऑप्टिमाइज़ेशन में महारत हासिल करना ही डेटाबेस इंजीनियरिंग की असली नींव है।
👉 SQLMaster पर डेटाबेस आर्किटेक्चर का व्यावहारिक अभ्यास करें। ब्राउज़र में ही स्कीमा मॉडलिंग, फॉरेन कीज़, इंडेक्सिंग और जटिल क्वेरीज़ का अभ्यास करें।
SQL Lab में उदाहरण चलाएँ
इस गाइड का सेटअप और क्वेरी लैब में कॉपी करें। उदाहरण SQLite पर चलते हैं। पाठ और लैब के निर्देश अभी अंग्रेज़ी में हैं।
SQL Lab खोलें