SQL सर्वर में फ़ाइलें संग्रहीत करना


80

यह एक पुराना सवाल है जो मुझे पता है, लेकिन SQL सर्वर 2012 के साथ डेटाबेस में फ़ाइलों को संग्रहीत करना ठीक है, या क्या उन्हें वास्तव में फाइल सिस्टम में डेटाबेस में केवल उनके संदर्भ में रखा जाना चाहिए?

अगर इन दिनों डेटाबेस में इन्हें स्टोर करना स्वीकार्य माना जाता है, तो इसे करने का सबसे प्रभावी तरीका क्या है?

मैं एन्क्रिप्शन लागू करने की योजना बना रहा हूं, इसलिए मैं सराहना करता हूं कि प्रोसेसिंग तेज नहीं होगी।


6
यकीन नहीं होता अगर मैं करूँ मैं अभी जानना चाहता हूं कि क्या यह एक व्यवहार्य विकल्प है।
CompanyDroneFromSector7G

जवाबों:


116

Microsoft रिसर्च द्वारा वास्तव में एक अच्छा पेपर है जिसे To Blob या Not To Blob कहा जाता है ।

बड़ी संख्या में प्रदर्शन परीक्षण और विश्लेषण के बाद उनका निष्कर्ष यह है:

  • यदि आपके चित्र या दस्तावेज़ आमतौर पर आकार में 256K से नीचे हैं, तो उन्हें डेटाबेस VARBINARY कॉलम में संग्रहीत करना अधिक कुशल है

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

  • उन दोनों के बीच में, यह आपके उपयोग के आधार पर एक टॉस-अप का एक सा है

यदि आप अपनी तस्वीरों को SQL सर्वर तालिका में रखने का निर्णय लेते हैं, तो मैं दृढ़ता से उन चित्रों को संग्रहीत करने के लिए एक अलग तालिका का उपयोग करने की सलाह दूंगा - कर्मचारी की कर्मचारी तालिका में फ़ोटो को संग्रहीत न करें - उन्हें एक अलग तालिका में रखें। इस तरह, कर्मचारी तालिका दुबला और मतलबी और बहुत कुशल रह सकती है, यह मानते हुए कि आपको अपने प्रश्नों के भाग के रूप में कर्मचारी फोटो का चयन करने की आवश्यकता नहीं है।

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

अब, जब भी आपके पास बनाने के लिए एक नई तालिका होती है जिसमें VARCHAR (MAX) या VARBINARY (MAX) कॉलम संग्रहीत करने की आवश्यकता होती है, तो आप इस फ़ाइल समूह को बड़े डेटा के लिए निर्दिष्ट कर सकते हैं:

 CREATE TABLE dbo.YourTable
     (....... define the fields here ......)
     ON Data                   -- the basic "Data" filegroup for the regular data
     TEXTIMAGE_ON LARGE_DATA   -- the filegroup for large chunks of data

फ़ाइल समूह पर MSDN परिचय की जाँच करें, और इसके साथ खेलें!


1
ख़ूब कहा है। यह सब निश्चित रूप से उपयोग के मामले पर निर्भर करता है, लेकिन फाइलस्ट्रीम अक्सर एक अच्छा विकल्प होता है।
टिमोथीविज़मैन 17

3
आपके द्वारा उद्धृत शोध लेख अप्रैल 2006 से है। निश्चित रूप से तब से बहुत कुछ बदल गया है।
ऑक्सन

2
@ 1576573987: नहीं, वास्तव में नहीं - ये निष्कर्ष अभी भी मान्य हैं, जहां तक ​​मैं बता सकता हूं
marc_s

VARBINARY(MAX)एक अलग फाइलग्रुप में स्टोर करने के बारे में, यदि आपके पास एक अलग "फाइल" टेबल है, तो क्या आप उस पूरी फाइल को अलग फाइलग्रुप में स्टोर करते हैं या क्या आप मानक फाइलग्रुप (ओं) में फाइल "मेटा" डेटा को स्टोर करते हैं और बस स्टोर करते VARBINARY(MAX)हैं नया फ़ाइल समूह?
रिमार्कलिमा

@REDIALima: क्या आप FILETABLESQL Server 2012 में फ़ीचर के बारे में बात कर रहे हैं ? वहां, केवल फ़ाइल के बारे में मेटाडेटा SQL सर्वर (जैसे FILESTREAM) के अंदर संग्रहीत किया जाता है - वास्तविक फ़ाइल (बाइट्स जो इसे बनाती है) डेटाबेस के बाहर संग्रहीत होती हैं, डिस्क ड्राइव पर
marc_s

29

नहीं है अभी भी कोई सरल उत्तर। यह आपके परिदृश्य पर निर्भर करता है। MSDN के पास आपके निर्णय लेने में मदद करने के लिए प्रलेखन है।

यहां अन्य विकल्प भी शामिल हैं। फ़ाइल सिस्टम में सीधे या BLOB में संग्रहीत करने के बजाय, आप SQL Server 2012 में FileStream या फ़ाइल तालिका का उपयोग कर सकते हैं। फ़ाइल तालिका के फायदे एक नो-ब्रेनियर की तरह प्रतीत होते हैं (लेकिन माना जाता है कि मुझे उनके साथ कोई व्यक्तिगत प्रथम-हाथ अनुभव नहीं है। ।)

लेख निश्चित रूप से पढ़ने लायक है।


11

आप FILESTREAM पर पढ़ सकते हैं । यहाँ डॉक्स से कुछ जानकारी है जो आपको तय करने में मदद करनी चाहिए:

यदि निम्न स्थितियाँ सत्य हैं, तो आपको FILESTREAM का उपयोग करने पर विचार करना चाहिए:

  • जिन वस्तुओं को संग्रहीत किया जा रहा है, वे औसतन 1 एमबी से बड़ी हैं।
  • फास्ट रीड एक्सेस महत्वपूर्ण है।
  • आप एप्लिकेशन लॉजिक के लिए एक मध्य स्तरीय का उपयोग करने वाले एप्लिकेशन विकसित कर रहे हैं।

छोटी वस्तुओं के लिए, डेटाबेस में वर्बिनरी (अधिकतम) BLOBs का भंडारण करना अक्सर बेहतर स्ट्रीमिंग प्रदर्शन प्रदान करता है।


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