/dev/null एक ACID-compliant डेटाबेस है
(jyu.dev)/dev/nullसभी इनपुट को तुरंत discard कर देता है, लेकिन व्यंग्यात्मक रूप से इसे transaction की ACID properties को पूरी तरह संतुष्ट करने वाली system के रूप में समझाया गया है- Atomicity के संदर्भ में, डेटा आंशिक रूप से लिखे जाने के बजाय या तो पूरी तरह गायब हो जाता है या बिल्कुल लिखा ही नहीं जाता
- Consistency के लिहाज़ से, यह हमेशा खाली स्थिति बनाए रखता है, इसलिए system की invariant conditions कभी नहीं टूटतीं
- Isolation में, कई processes एक साथ access करें तब भी वे एक-दूसरे में हस्तक्षेप नहीं करते, और कुछ भी store न होने के कारण conflict भी नहीं होता
- Durability इस मायने में परफ़ेक्ट है कि reboot के बाद भी यह अब भी ‘कुछ नहीं’ बनाए रखता है, हालांकि storage capacity 0 bytes होना इसकी एकमात्र सीमा के रूप में मज़ाकिया ढंग से बताया गया है
/dev/null की ACID विशेषताओं का विश्लेषण
/dev/nullएक special file है जो सभी इनपुट लेकर उन्हें तुरंत discard कर देता है, और Linux व Unix-आधारित systems में आमतौर पर data sink की भूमिका निभाता है- लेखक इसे “Web Scale” डेटाबेस के रूप में उपमा देता है और database की मुख्य ACID properties को व्यंग्यात्मक ढंग से लागू करता है
- नतीजतन,
/dev/nullपूरी तरह स्थिर है, लेकिन कोई भी डेटा store नहीं करता — इस अर्थ में यह चरम सादगी दिखाता है
Atomicity — परमाण्विकता
/dev/nullमें डेटा लिखने पर सब कुछ गायब हो जाता है या बिल्कुल लिखा ही नहीं जाता, आंशिक write जैसी कोई चीज़ नहीं होती- यह transaction के “all or nothing” principle जैसा ही व्यवहार है
- इसलिए
/dev/nullpartial failure या incomplete state transition के बिना पूर्ण atomicity की गारंटी देता है
Consistency — संगतता
/dev/nullहमेशा खाली स्थिति में रहता है, और कोई भी इनपुट इस invariant को नहीं तोड़ता- डेटा लिखा भी जाए तो वह तुरंत discard हो जाता है, इसलिए system हमेशा valid state में transition करता है
- नतीजतन, “file में कुछ भी नहीं है” वाला invariant हमेशा सत्य बना रहता है
Isolation — पृथक्करण
- कई processes एक साथ
/dev/nullमें डेटा लिखें तब भी कोई conflict या interference नहीं होता- क्योंकि वास्तव में कुछ store ही नहीं होता, इसलिए transactions के बीच कोई प्रभाव नहीं पड़ता
- यह पूर्ण parallel processing environment में भी consistent result की गारंटी देने वाला आदर्श isolation implementation है
Durability — स्थायित्व
/dev/nullडेटा को “स्थायी रूप से कुछ भी नहीं” की स्थिति में commit करता है- system crash हो जाए या reboot,
/dev/nullकी स्थिति नहीं बदलती - यानी यह ‘शून्य’ की स्थायित्व को पूरी तरह सुनिश्चित करता है
- system crash हो जाए या reboot,
सीमाएँ और मज़ाकिया निष्कर्ष
- लेखक
/dev/nullकी एकमात्र समस्या के रूप में “0 bytes storage space” की ओर इशारा करता है- अगर ज़्यादा space चाहिए, तो “enterprise sales team (असल में स्वयं लेखक)” से संपर्क करने वाला मज़ाक कर लेख समाप्त होता है
- यह database capacity और performance को लेकर IT industry की बढ़ा-चढ़ाकर की जाने वाली marketing practices पर व्यंग्य है
1 टिप्पणियां
Hacker News राय
पुरानी HN चर्चा यहाँ देखी जा सकती है
fastjsonनाम का एक अत्यंत तेज़ JSON parser भी पेश किया गया (GitHub लिंक)/dev/nullको DB, तथा backend को nocode से बनाया जाए/dev/nullपर ले जाने के बाद से user-संबंधी समस्याएँ एक बार भी नहीं हुईं/dev/nullका ACID satisfy करना DB का trivial solution जैसा हैफिर भी यह याद दिलाने के लिए अच्छा लेख था कि ACID जैसे concepts निर्वात में मौजूद नहीं होते (संदर्भ लिंक)
/dev/nullके अंदर हो तो शायद अपवाद माना जा सकता है/dev/nullको इस तरह के काम के लिए इस्तेमाल किया हैजब output को कहीं जाना तो चाहिए, लेकिन मैं यह सोचकर परेशान नहीं होना चाहता कि वह जगह उसे संभाल पाएगी या नहीं
deploy चरण में बाद में इसे किसी validated store से बदला जा सकता है
/dev/nullstorage की दुनिया काtruecommand जैसा है/dev/nullऔरtrueको मैं सबसे bug-free चीज़ों में ज़रूर रखूँगा/dev/nullहमेशा immediate consistency देता है, हमेशा available रहता है, और पूरी partition tolerance रखता हैअनंत nodes तक scale करने पर भी पूरा CAP बनाए रखने वाला यह इकलौता DB है
/dev/null0,/dev/null1अलग-अलग चलाते हैंfailure होने पर symbolic link को हाथ से update किया जाता है, और sarbox audit पास न हो तो production में इस्तेमाल की अनुमति नहीं मिलती
/devके mount न होने की स्थिति कभी नहीं देखी/dev/nullकई अकादमिक परिभाषाओं में serializable है, लेकिन strict serializable नहींसभी reads को समय 0 पर करके खाली result लौटाया जा सकता है, और writes को उनके होने के समय बस फेंका जा सकता है
असली बात यह है कि real-time guarantee की माँग करनी चाहिए
/dev/nullसिस्टम में सिर्फ एक ही state मौजूद है/dev/nullweb scale है?/dev/nullपर zombo.com जैसी साइट भी चलाई जा सकती हैइसे supersimplestorageservice.com पर देखा जा सकता है,
और पुरानी HN चर्चाओं में भी यह कई बार आया है (search लिंक)
/dev/nullहमेशा खाली रहता है, लेकिन असल में **