तस्वीरों के रूप में या वेब ऐप के लिए डेटाबेस में स्टोर करें?


124

मेरा प्रश्न काफी सामान्य है और मुझे पता है कि इसका 100% उत्तर नहीं हो सकता है। मैं ASP .NET वेब समाधान का निर्माण कर रहा हूं जिसमें बहुत सारे चित्र शामिल होंगे और उम्मीद है कि उचित मात्रा में ट्रैफ़िक होगा। मैं वास्तव में प्रदर्शन हासिल करना चाहता हूं।

क्या मुझे डेटाबेस में या फाइल सिस्टम पर चित्रों को सहेजना चाहिए? और इस बात की परवाह किए बिना कि मैं एक विशिष्ट तरीका चुनने में अधिक दिलचस्पी रखता हूं।

बहुत धन्यवाद, स्टीफन

DUPLICATE : DB - Yea या Nay में स्टोरेज इमेजेस? , अपने फाइल सिस्टम में छवियों को कैसे स्टोर करें , कम संख्या में छवियों को संग्रहीत करना: बूँद या एफएस? और शायद कुछ अन्य।


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

  • मैं एक होस्टेड समाधान पर रहूंगा, मेरे पास बड़ी मात्रा में भंडारण (10 जीबी) है लेकिन डेटाबेस के लिए केवल 300mb है। यह डीबी में अतिरिक्त भंडारण के लिए बहुत खर्च होगा।

  • मैं एक डीबी विशेषज्ञ नहीं हूं और साथ ही साथ मैं डीबी की सेटिंग के नियंत्रण में नहीं हूं। एक DB आधारित समाधान को कस्टम कॉन्फ़िगरेशन की आवश्यकता हो सकती है क्योंकि यह दिखता है।

यदि हम अपने स्वयं के सर्वर पर साइट चलाने के लिए आगे बढ़ेंगे तो मैं एक डीबी आधारित समाधान पर विचार कर सकता हूं। धन्यवाद, स्टीफन


1
कृपया वह डेटाबेस निर्दिष्ट करें जिसका आप उपयोग कर रहे हैं।
गेरी शेंक

1
मैं बाद के संस्करण के MSSQL का उपयोग करने का इरादा रखता हूं।
स्टेफनी

1
@StefanE, फ़ाइल सिस्टम सभी इरादों और उद्देश्यों के लिए है, एक विशेष डेटाबेस जो फ़ाइल भंडारण के लिए अनुकूलित है।
ल्यूक

जवाबों:


175

डेटाबेस में फ़ाइल सिस्टम और चित्र स्थानों पर चित्रों को संग्रहीत करें।

क्यों? इसलिये...

  1. आप स्थिर फ़ाइलों के रूप में चित्रों की सेवा करने में सक्षम होंगे।
  2. चित्रों को लाने के लिए किसी डेटाबेस एक्सेस या एप्लिकेशन कोड की आवश्यकता नहीं होगी।
  3. प्रदर्शन को बेहतर बनाने के लिए छवियों को एक अलग सर्वर से परोसा जा सकता है।
  4. यह डेटाबेस की अड़चन को कम करेगा।
  5. डेटाबेस अंततः फ़ाइल सिस्टम पर अपना डेटा संग्रहीत करता है।
  6. फ़ाइल सिस्टम पर संग्रहीत होने पर छवियां आसानी से कैश की जा सकती हैं।

1
इसके अलावा, SQL सर्वर में जब आप छवि को "छवि" फ़ील्ड के रूप में संग्रहीत करते हैं, तो यह प्रभावी रूप से SQL क्या कर रहा है - कहीं पर डिस्क पर फ़ाइल के लिए एक पॉइंटर को संग्रहीत करना। इस प्रकार यह 8KB पेज की सीमा के आसपास हो जाता है।
ज़ाफ - बेन डुगुएड

9
यह वास्तव में संबोधित किया गया है SQL Server 2008। एक नया प्रकार शुरू किया गया था FILESTREAM Technet.microsoft.com/en-us/library/bb895234.aspx जो फ़ाइल सिस्टम के "प्रदर्शन का लाभ उठाने की अनुमति देता है और उसी समय बनाए रखता है" असंरचित डेटा और इसी संरचित डेटा के बीच लेन-देन की स्थिरता "
क्रिस्तोफ

हाँ, तुम ठीक कहते हो। मेरा सवाल यह है कि बूँद का आकार क्या है? या यह कितनी मेमोरी स्टोर कर सकता है?
अमीर खान

11

मेरी हाल ही में विकसित परियोजनाओं में, मैंने डेटाबेस तालिकाओं में छवि स्तंभों के रूप में चित्र (और सभी प्रकार के बाइनरी दस्तावेज़) संग्रहीत किए।

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

आज की तकनीक का उपयोग करते हुए, मैं आपको SQL Server 2008 FILESTREAM कॉलम (कम से कम यही है कि मैं अपनी अगली परियोजना के साथ क्या करने जा रहा हूं) में छवियों को संग्रहीत करने का सुझाव देता हूं, क्योंकि वे डेटाबेस में डेटा संग्रहीत करने और अलग-अलग फ़ाइलों में बड़े बायनेरिज़ के लाभ को जोड़ते हैं (पर विज्ञापन के अनुसार कम से कम;))


क्या आपने अभी तक Filestream कार्यक्षमता का परीक्षण किया है?
स्टेफनी

1
दरअसल, DB रिकॉर्ड को डिलीट करते समय, फाइलसिस्टम से डिलीट करने के लिए भी कोड किया जा सकता है। इसलिए मुझे DB के बजाय FS में स्टोर करना अच्छा लगता है
kailash19

9

कहावत हमेशा "फाइल सिस्टम में फ़ाइलें, डेटाबेस में फ़ाइल मेटाडेटा" रही है


6

फ़ाइलों के रूप में फ़ाइलों को संग्रहीत करने के लिए बेहतर है। अलग-अलग डेटाबेस बूँद डेटा को अलग-अलग तरीके से हैंडल करते हैं, इसलिए अगर आपको अपना बैक एंड माइग्रेट करना है तो आप मुश्किल में पड़ सकते हैं।

जब impages की सेवा <img src = एक फाइल जो सर्वर पर पहले से मौजूद है, डेटाबेस क्षेत्र से एक अस्थायी फ़ाइल बनाने और <img टैग को इंगित करने की तुलना में तेज होने की संभावना है।

मुझे यह उत्तर आपके प्रश्न को समझने और http:// dat डेटाबेस.aspfaq.com/database/should-i-store-images-in-the-database-or-the-filesystem.html पर टिप्पणियों को पढ़ने से मिला।


1
संदर्भित पोस्ट थोड़ा पुराना है।
देवियो

6

मुझे आमतौर पर डेटाबेस में बाइनरी फाइलें पसंद हैं क्योंकि:

  • डेटा अखंडता: कोई अपरिचित फ़ाइल, बिना किसी फ़ाइल से जुड़े डीबी में कोई रास्ता नहीं
  • डेटा संगति: एक डेटाबेस डंप लें और वह सब है। नहीं "ओ मैं इस डेटा निर्देशिका को टार्गेट करना भूल गया।"

4

डेटाबेस में छवियों को संग्रहीत करना एकल छवियों की सेवा करने के लिए एक डीबी ओवरहेड जोड़ता है और यदि आप उस स्तर तक बढ़ते हैं तो वैकल्पिक भंडारण (एस 3, अकामी) को उतारना कठिन बना देता है। डेटाबेस में उन्हें संग्रहीत करना आपके ऐप को किसी भिन्न सर्वर पर ले जाना बहुत आसान बनाता है क्योंकि यह केवल डीबी है जिसे अब स्थानांतरित करने की आवश्यकता है।

डिस्क पर छवियों को संग्रहीत करना वैकल्पिक भंडारण को उतारना आसान बनाता है, छवियों को स्थिर तत्व बनाता है ताकि आपको छवियों को सुगम बनाने के लिए अपने वेब ऐप में HTTP हेडर के साथ गड़बड़ न करना पड़े। नकारात्मक पक्ष यह है कि यदि आप कभी भी अपने ऐप को एक अलग सर्वर पर ले जाते हैं तो आपको छवियों को स्थानांतरित करने के लिए याद रखने की आवश्यकता होती है; कुछ ऐसा जो आसानी से भुला दिया जाए।


3

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


0

अभी तक पहले से ही अच्छे उत्तरों में कुछ और जोड़ने के लिए। तुम अब भी दोनों वेब स्तर से कैशिंग के लाभ प्राप्त कर सकते हैं हो सकता है और डेटाबेस स्तर यदि आप डेटाबेस में आप छवियों रखने तरीका अपनाते हैं।

मुझे लगता है कि डेटाबेस के लिए आप इसे प्राप्त कर सकते हैं कि आप छवियों को उनके साथ जुड़े शाब्दिक डेटा के संबंध में कैसे संग्रहीत करते हैं और यदि आप किसी विशेष क्वेरी में छवियों तक पहुंच प्राप्त कर सकते हैं ताकि डेटाबेस क्वेरी (बस सिद्धांत हालांकि) को कैश कर सके बेझिझक मुझे उस हिस्से पर नॉक करें)।

वेब साइड के साथ, मुझे लगता है कि जब से आप सवाल करेंगे asp.net के साथ टैग किया गया है कि आप छवियों को पूरा करने के लिए http हैंडलर का उपयोग करने के मार्ग पर जाएंगे। तब आपके पास अपने निपटान में ढांचे के सभी लाभ हैं और आप केवल http हैंडलर को अपनी छवि की कुंजी पास करने के लिए डोमेन लॉजिक क्लीनर रख सकते हैं।


-1

अपनी फ़ाइलों को संग्रहीत करने के लिए एक व्यक्तिगत NoSql डेटाबेस क्यों न चुनें।

यह आपको डेटा अखंडता, डेटा स्थिरता के साथ @chburd के रूप में उल्लेख किया है।

जबकि आप rdbms अभी भी छोटे रखते हैं।


-1
  1. Eclipseफ़ाइल सिस्टम में छवियों को संग्रहीत करने और उनके मेटाडेटा डीके में रखने का एक चरण-दर-चरण उदाहरण (सामान्य दृष्टिकोण, स्प्रिंग कार्यान्वयन ) यहां दिया गया है - http://www.devmanuals.com/tutorials/java/spring/spring3/mvc /Spring3MVCImageUpload.html
  2. यहाँ एक उदाहरण भी है - http://www.journaldev.com/2573/spring-mvc-file-upload-example-tutorial-single-and-multiple-files
  3. इसके अलावा आप इस परियोजना के कोडबेस की जांच कर सकते हैं - https://github.com/jdmr/fileUploadइस नियंत्रक पर ध्यान दें ।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.