मुझे एक एप्लिकेशन मिला है, जो डेवलपर्स के एक जोड़े के बीच एक अधिक गर्म चर्चा उत्पन्न करता है।
असल में, यह एक वेब लेयर और बैकएंड लेयर में विभाजित है। वेब लेयर एक साधारण वेब फॉर्म द्वारा जानकारी एकत्र करता है, इस डेटा को JSON डॉक्यूमेंट (शाब्दिक रूप से .json फाइल) के रूप में बैक एंड द्वारा उपयोग किए गए वॉच फोल्डर में जमा करता है। बैक एंड इस फोल्डर को हर कुछ सेकंड में पोल करता है, फाइल को उठाता है, और उसके फंक्शन्स को करता है।
फ़ाइलें बहुत ही सरल हैं (यानी सभी स्ट्रिंग डेटा, कोई नेस्टिंग), और 1-2k के आसपास उनकी सबसे बड़ी, सिस्टम अपने अधिकांश समय बेकार में खर्च करता है (लेकिन किसी भी समय 100 संदेशों तक फट)। बैकएंड प्रोसेसिंग चरण में प्रति संदेश लगभग 10 मिनट लगते हैं।
तर्क तब आता है जब एक डेवलपर सुझाव देता है कि मैसेजिंग लेयर के रूप में फाइलसिस्टम का उपयोग करना एक बुरा समाधान है, जब एक रिलेशनल डेटाबेस (MySQL), noSQL डेटाबेस (रेडिस), या यहां तक कि सादे REST API कॉल जैसी किसी चीज़ का उपयोग किया जाना चाहिए।
यह ध्यान दिया जाना चाहिए कि पंक्तिबद्ध संदेश हैंडलिंग के लिए संगठन में कहीं और रेडिस का उपयोग किया जाता है।
मैंने जिन तर्कों को सुना है, वे इस प्रकार हैं
फ्लैट फ़ाइलों के पक्ष में:
किसी अन्य समाधान की तुलना में फ्लैट फाइलें अधिक विश्वसनीय होती हैं, क्योंकि फाइल केवल "वॉच" फ़ोल्डर से ले जाने के बाद, "प्रोसेसिंग" फ़ोल्डर में ले जाने के बाद, और अंत में समाप्त होने पर "किए गए" फ़ोल्डर में जाती है। संदेशों के शून्य जोखिम बहुत कम स्तर के कीड़े को छोड़कर गायब हो जाते हैं जो अन्य चीजों को वैसे भी तोड़ देगा।
फ्लैट फ़ाइलों को समझने के लिए कम तकनीकी परिष्कार की आवश्यकता होती है - बस
cat
। लिखने के लिए कोई प्रश्न नहीं, गलती से कतार से एक संदेश को पॉप करने और इसे हमेशा के लिए चले जाने का कोई जोखिम नहीं है।फ़ाइल प्रबंधन कोड प्रोग्रामिंग दृष्टिकोण से डेटाबेस एपीआई की तुलना में सरल है, क्योंकि यह हर भाषा के मानक पुस्तकालय का हिस्सा है। यह कोड आधार की समग्र जटिलता और तीसरे पक्ष के कोड की मात्रा को कम करता है जिसे अंदर लाया जाना चाहिए।
YAGNI सिद्धांत कहा गया है कि फ्लैट फ़ाइलें ठीक अभी काम करते हैं, वहाँ कोई एक अधिक जटिल समाधान के लिए बदलने के लिए प्रदर्शन किया है की जरूरत है, तो यह छोड़ दें।
डेटाबेस के पक्ष में:
फ़ाइलों से भरी निर्देशिका की तुलना में डेटाबेस को स्केल करना आसान है
फ्लैट फाइलों से किसी को "किया" फाइल को "वॉच" डायरेक्टरी में वापस कॉपी करने का जोखिम होता है। इस एप्लिकेशन (वर्चुअल मशीन प्रबंधन) की प्रकृति के कारण, इससे भयावह डेटा हानि हो सकती है।
टी / एस के लिए अधिक तकनीकी परिष्कार की आवश्यकता होती है, इसका मतलब है कि अशिक्षित कर्मचारियों को केवल चीजों के लिए प्रहार करने से कुछ को कम करने की संभावना है।
डीबी कनेक्शन कोड, विशेष रूप से रेडिस जैसी किसी चीज के लिए, मानक पुस्तकालय फ़ाइल प्रबंधन कार्यों की तरह कम से कम मजबूत है।
डीबी कनेक्शन कोड है दिख (यदि कार्यात्मक नहीं) एक डेवलपर के दृष्टिकोण से सरल, फ़ाइल हेरफेर की तुलना में अपने उच्च स्तर के बाद से।
मैं जो देख सकता हूं, दोनों डेवलपर्स के पास बहुत सारे वैध बिंदु हैं।
तो इन दो लोगों में, प्रो-फाइल देव, या प्रो-डेटाबेस देव, जो कि सॉफ्टवेयर इंजीनियरिंग के सर्वोत्तम अभ्यास के अनुरूप है, और क्यों?