SQL सर्वर बनाम फ़ाइल सिस्टम बनाम S3 आदि से बाहर छवियों की सेवा


12

मेरे आवेदन (क्लासिक एस्प याय!) में लगभग 2.1 मिलियन छवियां हैं @ 25GB और यह केवल 90 दिनों के डेटा का प्रतिनिधित्व करता है और मैं न्यूनतम 365 पर जाना चाहता हूं। मुझे इन पर नियंत्रण पाने की जरूरत है और सभी विकल्पों पर विचार कर रहा हूं। निम्नलिखित प्रथाओं के पेशेवरों और विपक्षों पर आपके विचार क्या हैं:

  • SQL सर्वर पेशेवरों: विपक्ष का समर्थन करने के लिए आसान: प्रदर्शन?
  • फ़ाइल सिस्टम पेशेवरों: गति विपक्ष: अतिरेक, बैक अप धीमा है (वर्तमान में इसके बजाय सिंथेटिक पूर्ण बैक अप करने पर शोध कर रहा है जो इसे बेहतर बना सकता है)
  • S3 और जैसे पेशेवरों: बैंडविड्थ मेरे डेटासेंटर से अमेज़ॅन में स्थानांतरित कर दिया गया है, लगभग असीमित भंडारण। विपक्ष: लागत, लागत विश्लेषण मुश्किल है (मेरे बैंडविड्थ के 80% का अनुमान आरओआई उद्देश्यों के लिए चित्र है), सेवा प्रदाताओं के लिए मुश्किल / महंगा होना चाहिए जो आवश्यक हो जाएं

क्या कोई अन्य व्यक्ति मल्टी-मिलियन छवि चुनौती से निपटता है और आपने इसे कैसे संबोधित किया?


4
डेटाबेस में छवि डेटा (ब्लॉब्स) को स्टोर न करें, न करें। हमने कई साल पहले यह गलती की थी और तब से इसके लिए भुगतान कर रहे हैं। डेटाबेस मेटाडेटा के लिए बहुत अच्छा है।
मार्क हेंडरसन

FILESTREAM डेटाटाइप के बारे में मेरी पोस्ट देखें - यह आपके दिमाग को बदल सकता है।
डैन डिप्लो

जवाबों:


6

हमारे पास लाखों छवियां नहीं हैं, लेकिन सैकड़ों हजारों हैं, और हम हाइब्रिड दृष्टिकोण का उपयोग करते हैं - मेटाडेटा के लिए mysql, बैकअप के लिए स्थानीय डिस्क पर संग्रहीत छवियां, और अमेज़ॅन s3 पर धकेल दिया गया जहां वे उपयोगकर्ताओं को प्रदान किए जाते हैं। हमें अमेज़न और उपलब्धता से कोई परेशानी नहीं है। क्लाउडफ्रंट में जाना हमारी योजनाओं में है, बस समय खोजने की जरूरत है।

यह चर्चा आपके निर्णय में आपके लिए सहायक हो सकती है:
http://ask.metafilter.com/59635/Millions-of-images

मैं SQL सर्वर और फाइल सिस्टम (या s3 या क्लाउडफ्रंट) पर मेटाडेटा के साथ जाऊंगा। लेकिन सबसे अच्छा जवाब कुछ अन्य उपयोग पैटर्न पर निर्भर करता है:

  • चित्र अक्सर बदलते हैं
  • क्या आप सीधे फाइलसिस्टम से छवियों की सेवा कर सकते हैं (जो है img src="...") या क्या आपको उन्हें नियंत्रित करने की आवश्यकता है। यदि उत्तरार्द्ध, तो एक डेटाबेस समाधान सबसे अच्छा है
  • क्या आप ज्यादातर समय (सबसे हाल ही में 10%) छवियों की एक छोटी संख्या की सेवा कर रहे हैं या वितरण अपेक्षाकृत व्यापक है।

लाखों छवियों के लिए बैकअप जटिल होने जा रहे हैं, भले ही आप उन्हें कैसे व्यवस्थित करें - यह बहुत सारा डेटा है। इससे पहले कि मैं उस समाधान के लिए प्रतिबद्ध SQL सर्वर में blobs बैकिंग पर एक अच्छा मामला अध्ययन करना चाहता हूँ। (यहाँ एक लेख उपयोगी हो सकता है: http://www.databasejournal.com/features/mssql/article.php/3738276/Storing-Images-and-BLOB-files-in-SQL-erver-Part-4.htm )


बैकअप जटिल होने जा रहा है, लेकिन कम से कम फ़ाइल-स्तरीय बैकअप के साथ आपको (आम तौर पर) केवल एक रिकॉर्ड / छवि को पुनर्स्थापित करने के लिए संपूर्ण बैकअप को पुनर्स्थापित करने की आवश्यकता नहीं है। IMO, फ़ाइल सिस्टम डिफ़ॉल्ट रूप से जब तक कि डेटाबेस आपको कुछ ऐसा न दे जो आप अन्यथा नहीं कर सकते। +1
जेसनबिरच

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

3

यदि आप फ़ाइल सिस्टम में उन्हें संग्रहीत करने के साथ जाने का निर्णय लेते हैं, तो आप कुछ सर्वर के लिए इस सर्वरफॉल्ट प्रश्न पर पढ़ना चाहते हैं और न करें: फाइल सिस्टम में एक लाख छवियों को संग्रहीत करना


3

उन लोगों को अनदेखा करें जो कहते हैं, " डेटाबेस में छवियों / द्विआधारी डेटा को संग्रहीत न करें " क्योंकि वे पुरानी जानकारी पर अपने जवाबों को आधार बना रहे हैं (यह मानते हुए कि आप डेटा को VarBinary प्रकार के कॉलम में संग्रहीत करेंगे)। SQL सर्वर 2008 में FILESTREAM डेटा प्रकार का उपयोग करके छवियों को संग्रहीत करने के लिए SQL सर्वर का उपयोग करने वाले प्रदर्शन की चिंताओं को कम किया जा सकता है । संक्षेप में, FILESTREAM डेटा प्रकार आपको डेटाबेस में स्टोर किए गए डेटा की आसानी को उस प्रदर्शन के साथ संयोजित करने की अनुमति देता है, जिसमें आप सेवारत हैं। NTFS फ़ाइल स्टोर से फ़ाइलें।

SQL Mag उद्धृत करने के लिए :

"SQL Server 2008 का नया FILESTREAM समर्थन NTFS फ़ाइल सिस्टम से सीधे LOB तक पहुँचने के लाभ को संदर्भित करता है और SQL सर्वर रिलेशनल डेटाबेस इंजन द्वारा प्रदान की जाने वाली सहजता और पहुँच में आसानी के साथ है।"

अधिक जानकारी के लिए इस ब्लॉग को रवि एसमनिअम द्वारा MSDN पर पढ़ें ।


क्या FILESTREAM संग्रहण बैकअप / पुनर्स्थापना कहानी को बिल्कुल बदल देता है? यह अभी हमारा सबसे बड़ा हैंगअप है ... अगर वे वर्बिनरी में संग्रहीत हैं तो यह अपेक्षाकृत सीधे आगे की कहानी होगी।
वेबजेडी जूल

नहीं, FILESTREAM डेटा को किसी अन्य के समान माना जाता है, इसलिए डेटाबेस के साथ बैकअप लिया जाता है। MSDN को उद्धृत करने के लिए: "आप FILESTREAM डेटा के साथ सभी बैकअप और रिकवरी मॉडल का उपयोग कर सकते हैं, और FILESTREAM डेटा को डेटाबेस में संरचित डेटा के साथ बैकअप दिया जाता है।" - Technet.microsoft.com/en-us/library/bb933993.aspx
Dan Diplo

2

हालांकि मैं मल्टी-मिलियन इमेज चैलेंज से निपटता नहीं हूं, मैं अमेज़ॅन क्लाउडफ्रंट का उपयोग करूंगा। यह सभी फाइलें एक S3 बाल्टी में संग्रहीत हैं, लेकिन अमेज़ॅन की सामग्री वितरण प्रणाली के माध्यम से सर्वर हैं। मैं S3 का उपयोग अकेले नहीं करूंगा।

मेरी दूसरी पसंद फ़ाइल सिस्टम होगी। सरल और आसान, केवल समस्या यह है कि यदि ये सभी फाइलें एक निर्देशिका में समाप्त हो जाती हैं, तो पूरी चीज दुर्घटनाग्रस्त हो जाएगी।

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


मेरे परिदृश्य में, वर्तमान में सब कुछ मेरे अपने सर्वर पर है कि मैं अपना हूं। इसलिए प्रति लेनदेन लेनदेन लागत नहीं है।
वेबजेडी जूल

1

डेटाबेस लेनदेन डेटा / स्थिरता और सुरक्षा के लिए डिज़ाइन किए गए हैं।

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

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

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