2009-02-18 18 views
113

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

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

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

डुप्लीकेट: Storing Images in DB - Yea or Nay?, How to store images in your filesystem, Storing a small number of images: blob or fs? और शायद कुछ अन्य लोगों के।


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

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

  • मैं डीबी विशेषज्ञ नहीं हूं और साथ ही डीबी की सेटिंग्स के नियंत्रण में नहीं हूं। एक डीबी आधारित समाधान के रूप में ऐसा लगता है कि कस्टम विन्यास की आवश्यकता हो सकती है।

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

+1

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

+1

मैं बाद के संस्करण के एमएसएसक्यूएल का उपयोग करना चाहता हूं। – StefanE

+1

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

उत्तर

161

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

क्यों? क्योंकि ...

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

के बजाय एफएस में स्टोर करना अच्छा लगता है। +1। – Beska

+0

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

+9

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

6

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

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

मैं आपके सवाल का googling और http://databases.aspfaq.com/database/should-i-store-images-in-the-database-or-the-filesystem.html

+1

निर्दिष्ट पोस्ट कुछ पुराना प्रतीत होता है। – devio

11

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

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

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

+0

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

+1

दरअसल, डीबी रिकॉर्ड को हटाने पर, फाइल सिस्टम से भी हटाने के लिए कोड किया जा सकता है। इसलिए मुझे डीबी – kailash19

3

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

6

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

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

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

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

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

4

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

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

-1

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

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

जबकि आप rdbms अभी भी छोटे रखते हैं। http://www.devmanuals.com/tutorials/java/spring/spring3/mvc/Spring3MVCImageUpload.html

  • यहाँ एक उदाहरण भी है -

  • -1
    1. यहाँ एक चरण-दर-चरण उदाहरण (सामान्य दृष्टिकोण, स्प्रिंग कार्यान्वयन, Eclipse) फाइल सिस्टम में छवियों भंडारण और डीबी में उनके मेटाडाटा धारण करने की है - http://www.journaldev.com/2573/spring-mvc-file-upload-example-tutorial-single-and-multiple-files
    2. इसके अलावा आप इस परियोजना के कोडबेस की जांच कर सकते हैं - https://github.com/jdmr/fileUploadthis नियंत्रक पर ध्यान दें।
    संबंधित मुद्दे