फ़ाइल सिस्टम के विपरीत डेटाबेस में फ़ाइल संग्रहीत करना?


83

आम तौर पर, एक प्रदर्शन हिट का कितना बुरा फाइल सिस्टम के विपरीत डेटाबेस (विशेष रूप से mssql) में एक फ़ाइल संग्रहीत है? मैं अनुप्रयोग पोर्टेबिलिटी के बाहर एक कारण के साथ नहीं आ सकता है कि मैं अपनी फ़ाइलों को SQL सर्वर में वैरिनरी के रूप में संग्रहीत करना चाहता हूं।

जवाबों:


77

इस जवाब पर एक नजर:

DB में भंडारण छवियाँ - हाँ या Nay?

अनिवार्य रूप से, उपयोगकर्ताओं की संख्या के आधार पर अंतरिक्ष और प्रदर्शन हिट काफी बड़ा हो सकता है। इसके अलावा, यह ध्यान रखें कि वेब सर्वर सस्ते हैं और आप आसानी से लोड को संतुलित करने के लिए अधिक जोड़ सकते हैं, जबकि आमतौर पर वेब आर्किटेक्चर के हिस्से के लिए डेटाबेस सबसे महंगा और कठिन होता है।

कुछ विपरीत उदाहरण हैं (उदाहरण के लिए, Microsoft शेयरपॉइंट), लेकिन आमतौर पर, डेटाबेस में फ़ाइलों को संग्रहीत करना एक अच्छा विचार नहीं है।

जब तक संभवतः आप डेस्कटॉप ऐप नहीं लिखते और / या लगभग जानते हैं कि आपके पास कितने उपयोगकर्ता होंगे, लेकिन सार्वजनिक वेब साइट की तरह यादृच्छिक और अनपेक्षित के रूप में कुछ पर, आप डेटाबेस में फ़ाइलों को संग्रहीत करने के लिए उच्च कीमत का भुगतान कर सकते हैं।


36

यदि आप SQL Server 2008 में जा सकते हैं, तो आप FILESTREAM समर्थन का लाभ उठा सकते हैं जो आपको दोनों का सबसे अच्छा देता है - फाइलें फाइलसिस्टम में संग्रहीत की जाती हैं, लेकिन डेटाबेस एकीकरण सिर्फ एक varchar क्षेत्र में एक फ़ाइलपथ को संग्रहीत करने की तुलना में बहुत बेहतर है। आपकी क्वेरी एक मानक .NET फ़ाइल स्ट्रीम लौटा सकती है, जो एकीकरण को बहुत सरल बनाती है।

FILESTREAM संग्रहण के साथ आरंभ करना


1
मैं यहाँ कुछ आरक्षण कर रहा हूँ। विशेष रूप से चीजों की मापनीयता और उपलब्धता पक्ष: आप कैसे नियंत्रित करते हैं जहां उन "ब्लॉब्स" को संग्रहीत किया जाता है?
डेव वान डेन आईंड सेप

3
स्केलेबिलिटी और उपलब्धता के माध्यम से बहुत अच्छी तरह से सोचा गया है - इस व्हाइटपेपर को
जॉन गैलोवे

2
इसके लिए एक चेतावनी यह है कि आपको डेटाबेस से कनेक्ट करते समय एकीकृत सुरक्षा (यानी विंडोज प्रमाणीकरण) का उपयोग करना होगा: blogs.msdn.com/b/psssql/archive/2008/04/10/…
स्वेन

22

मैं कहूंगा, यह आपकी स्थिति पर निर्भर करता है। उदाहरण के लिए, मैं स्थानीय सरकार में काम करता हूं, और हमारे पास बहुत सारी छवियां हैं जैसे कि मगशॉट, आदि। हमारे पास उपयोगकर्ताओं की अधिक संख्या नहीं है, लेकिन हमें डेटा के आसपास अच्छी सुरक्षा और ऑडिटिंग करने की आवश्यकता है। डेटाबेस हमारे लिए एक बेहतर समाधान है क्योंकि यह इसे आसान बनाता है और हम समस्याओं को कम करने में नहीं जा रहे हैं।


6

यहाँ क्या सवाल है?

मॉडर्न DBMS SQL2008 में BLOB से निपटने के कई तरीके हैं जो सिर्फ एक टेबल में उन्हें चिपका नहीं रहे हैं। निश्चित रूप से इसके पक्ष और विपक्ष हैं, और आपको इसके बारे में थोड़ा गहराई से सोचने की आवश्यकता हो सकती है।

यह एक दिलचस्प पेपर है, देर से (?) जिम ग्रे द्वारा

BLOB या नहीं BLOB करने के लिए: एक डेटाबेस या एक फाइल सिस्टम में बड़ी वस्तु भंडारण


3

मेरे अपने अनुभव में, फ़ाइलों के रूप में फ़ाइलों को संग्रहीत करना हमेशा बेहतर होता है। कारण यह है कि फ़ाइल सिस्टम फ़ाइल स्टोरेज के लिए अनुकूलित है, जबकि एक डेटाबेस नहीं है। बेशक, कुछ अपवाद हैं (उदाहरण के लिए बहुत अधिक अगली-जेनरल एमएस फाइलसिस्टम को SQL सर्वर के शीर्ष पर बनाया जाना चाहिए), लेकिन सामान्य तौर पर यह मेरा नियम है।


3

जबकि प्रदर्शन एक मुद्दा है, मुझे लगता है कि आधुनिक डेटाबेस डिज़ाइनों ने इसे छोटी फ़ाइलों के लिए एक समस्या से बहुत कम बना दिया है।

एक तरफ प्रदर्शन, यह भी निर्भर करता है कि डेटा कितना कसकर-युग्मित है। यदि फ़ाइल में डेटा है जो डेटाबेस के क्षेत्रों से निकटता से संबंधित है, तो यह वैचारिक रूप से इसके करीब है और एक ब्लॉब में संग्रहीत किया जा सकता है। यदि इसमें ऐसी जानकारी है जो संभावित रूप से कई रिकॉर्ड से संबंधित हो सकती है या डेटाबेस के संदर्भ के बाहर कुछ उपयोग हो सकती है, तो यह बाहर से संबंधित है। उदाहरण के लिए, वेब पेज पर एक छवि को उस लिंक से अलग अनुरोध पर लाया जाता है, जिससे यह लिंक होता है, इसलिए यह बाहर का हो सकता है (विशिष्ट डिजाइन और सुरक्षा के आधार पर)।

हमारा समझौता, और मैं वादा नहीं करता कि यह सबसे अच्छा है, डेटाबेस में छोटे XML फ़ाइलों को संग्रहीत करने के लिए किया गया है, लेकिन छवियों और इसके बाहर अन्य फाइलें।


आप एक छोटी या बड़ी फ़ाइल को क्या मानते हैं?
ubiquibacon

2

हमने http://www.freshlogicstudios.com/Products/Folders/ आधे रास्ते के प्रदर्शन के मुद्दों की उम्मीद के रूप में स्टोर करने का निर्णय लिया । मैं कह सकता हूं कि हमने सुखद आश्चर्यचकित किया है कि यह कितनी अच्छी तरह काम कर रहा है।


1

मैं @ZombieSheep से सहमत हूं। बस एक और बात - मुझे आमतौर पर नहीं लगता कि डेटाबेस को वास्तव में पोर्टेबल होने की आवश्यकता है क्योंकि आप उन सभी विशेषताओं को याद करते हैं जो आपके DBMS विक्रेता प्रदान करता है। मुझे लगता है कि किसी अन्य डेटाबेस पर जाना एक आखिरी बात होगी जिस पर कोई विचार करेगा। बस मेरी $ .02


1

एक बाइट (छवि) को बाइट सरणी में पार्स करने के लिए ओवरहेड करें और फिर इसे उचित फ़ाइल नाम में डिस्क पर लिखें और फिर इसे पढ़ना एक ओवरहेड हिट के लिए आपको बहुत बार ऐसा करने से हतोत्साहित करने के लिए पर्याप्त है, खासकर यदि फाइलें हैं बल्कि बड़ी।


1
मैंने कहीं भी उल्लेख नहीं किया है कि इस "फ़ाइल" को डिस्क पर लिखने और फिर से पढ़ने की आवश्यकता है।
डेव वान डेन आईंड सेप

यह एक अंतर्निहित कार्य है जब छवियों को बाद में प्रदर्शित किया जाना होता है, खासकर जब विभिन्न स्वरूपों में या ऐसे परिदृश्यों में संग्रहीत किया जाता है जहां उन्हें सरासर आकार के आधार पर समय की अवधि के लिए स्मृति में आयोजित नहीं किया जा सकता है।
जॉन लीमजप

0

अस्पष्ट या कुछ भी नहीं है, लेकिन मुझे लगता है कि आप जिस फ़ाइल को स्टोर कर रहे हैं उसका प्रकार 'सबसे बड़ा निर्धारण कारक' होगा। यदि आप अनिवार्य रूप से एक बड़े पाठ क्षेत्र के बारे में बात कर रहे हैं जो फ़ाइल के रूप में संग्रहीत किया जा सकता है तो मेरी प्राथमिकता डीबी भंडारण के लिए होगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.