2013-02-21 13 views
5

मैं डेटा यूआरआई (क्लाइंट साइड, कैनवास का उपयोग करके) का उपयोग कर सर्वर पर एक छवि पोस्ट कर रहा हूं। अब मेरे पास दो विकल्प हैं: मैं "छवि" को एक वर्चर (अधिकतम) कॉलम में एक स्ट्रिंग के रूप में सहेज सकता हूं या मैं इसे बाइट [] में परिवर्तित कर सकता हूं और इसे varbinary (max) के रूप में सहेज सकता हूं।डाटाबेस में डेटा यूआरआई बनाम बाइनरी

जहां तक ​​कार्यान्वयन, प्रयास समान है। मैं यह निर्धारित करने की कोशिश कर रहा हूं कि 1 तक जितना अधिक कुशल होगा: डीबी में स्थान और 2: छवि प्रदर्शित करना। क्या किसी ने इस पर कोई विश्लेषण देखा है या इसे मापने का एक अच्छा तरीका है?

एएन एफवाईआई - डीबी में एक 3 केबी छवि लगभग 100 के वर्ण है।

का उपयोग करना: ASP.NET 4.5, MVC ने एसक्यूएल सर्वर 2008

स्पष्ट करने के लिए

मैं या तो एक varbinary में बाइट [] का उपयोग कर डेटाबेस में छवि को स्टोर कर सकते (मैक्स) स्तंभ है की तरह आम तौर पर मामला या मैं डाटाबेस कैनवास से डेटा यूआरआई स्टोर कर सकता हूं जो डेटा जैसा दिखता है: छवि/पीएनजी; बेस 64, iVBORw0K ... एक वर्चर (अधिकतम) कॉलम में।

बाइट स्टोर करना [] सामान्य है और उसे और स्पष्टीकरण की आवश्यकता नहीं है। डेटा भंडारण यूआरआई सिर्फ एक स्ट्रिंग है और छवि प्रदर्शित की बात होगी:

<img src="data:image/png;base64,iVBORw0K" /> or 
<img src="@Model.Uri" /> 

मेरा प्रश्न जो एक अधिक performant और अंतरिक्ष की बचत है और अगर कोई प्रलेखन, श्वेत पत्र या इस विशिष्ट तुलना आसपास विश्लेषण है ।

+0

यह सहायक था। एक लिंक है?मैंने 40 मिनट की तलाश की है और ऐसी कोई तुलना नहीं मिल सकती है। –

+1

आप varbinary (max) varchar (max) –

+1

का उपयोग नहीं करेंगे, जबकि मैं आपके प्रयास की सराहना करता हूं, सवाल डेटाबेस में एक छवि संग्रहीत करने के बारे में नहीं था - जो मुझे 7 सेकंड ले जाएगा;) - यह भंडारण के बारे में है [डेटा यूआरआई ] (http://en.wikipedia.org/wiki/Data_URI_scheme) बाइट []/ब्लॉब के बजाय जो आमतौर पर संग्रहीत होता है। –

उत्तर

3

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

यूआरआई लगातार तेजी से डालने और चयन कर रहा था। तेजी से सापेक्ष होने के कारण यह मिलीसेकंड में मापा जाता है। यह एक कारक नहीं होना चाहिए - यह जो भी आसान है।

जहां तक ​​ग्राहक को प्रतिपादन किया जाता है। मैंने एक एमवीसी एक्शन विधि से एक छवि रीसेट (कस्टम एक्शन रिसेट जो एक छवि देता है) का उपयोग किया (यह http प्रतिक्रिया में एक छवि प्रस्तुत कर रहा है) और यूआरआई स्ट्रिंग को वापस कर रहा है और इसे छवि एसआरसी (यानी, src = "@ Model.Uri ")। फिर, मुश्किल से एक अंतर। क्रोम देव उपकरणों का उपयोग कर परिणाम:

ImageResult: 2 requests, 200ms, 3.2KB 
DATA URI: 2 requests, 200ms, 3.9KB 

हालांकि, मैं सूचना है कि ImageResult (बाइट []) संस्करण स्वचालित रूप से, क्योंकि यह सभी इरादों और उद्देश्यों के लिए एक छवि है ब्राउज़र द्वारा इसे साफ़ कर दिया था। डेटा यूआरआई संस्करण स्वचालित रूप से ब्राउज़र द्वारा कैश नहीं करता है।

इस प्राथमिक परीक्षण से, बाइट [] ब्राउज़र द्वारा स्वचालित कैशिंग और अन्य सभी परिणामों के बराबर होने का कारण है।

मेरे सेट अप: i7, 8GB राम, एसएसडी, एसक्यूएल सर्वर 2012, आईआईएस एक्सप्रेस

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

संबंधित मुद्दे