एक SQL सर्वर DB को बहुत सारी फाइलों (BLOBs) से संभालने की रणनीति?


11

परिदृश्य:
ASP.NET अनुप्रयोग (एक अलग वेब सर्वर पर) SQL Server 2005 डेटाबेस सर्विसिंग।

डेटाबेस:
DB में लगभग 5GB "सामान्य" डेटा है, और लगभग 15GB "फाइलें" (उदाहरण के लिए: एक 200k पीडीएफ एक छवि (BLOB) के रूप में संग्रहीत है, उस तरह की)। अधिक फाइलें उपयोगकर्ताओं द्वारा अपलोड की जा रही हैं, और तेजी से अधिक डिस्क स्थान का उपभोग कर रहे हैं (अगले कुछ महीनों में DB 50GB तक बढ़ सकता है, ज्यादातर फाइलें)।

चिंताएँ:
DB में बहुत सारी फ़ाइलों को संग्रहीत करना पहले से ही समस्याएँ पैदा कर रहा है (जैसे: डेटाबेस का बड़ा कुल आकार कभी-कभी पूरे-DB बैकअप और तैनाती को कठिन बना देता है।)।

और हम चिंतित हैं कि अधिक समस्याएं होंगी । (उदाहरण: प्रदर्शन के मुद्दे - शायद पूरे डीबी को रैम में रखने में सक्षम नहीं होने के कारण, शायद?)

प्रश्न:
आप इस समस्या का क्या तकनीकी समाधान सुझाएंगे? फाइल सिस्टम में फाइल स्टोर करें? डेटाबेस को दो में विभाजित करें और फ़ाइलों के लिए एक बड़ा, धीमा है?

यदि आवश्यक हो तो आगे के विवरण:
ये फाइलें अति-महत्वपूर्ण नहीं हैं, और बहुत तेजी से उपयोग के समय की आवश्यकता नहीं है - कुछ सेकंड का समय ठीक होगा, और वर्तमान में संभवतः प्रति घंटे एक दर्जन चयन प्रति घंटे हैं। DB में अन्य "सामान्य" डेटा में प्रति सेकंड कई बार आवश्यक जानकारी शामिल होती है।


क्या समाधान के एक भाग के रूप में 2008+ में उन्नयन संभव है?
जॉन सिगेल

@ जॉन सिगेल हां, 2008 (या 2012) में क्या विकल्प उपलब्ध हैं?
MGOwen

जवाबों:


6

मैं एक बहुत ही समान डेटाबेस की देखभाल करता हूं, वर्तमान में 3TB और प्रति दिन 5GB बढ़ रहा है।

  • Filestream (2008+) बैकअप / पुनर्स्थापना चुनौती को हल नहीं करता है।
  • Filestream फ़ाइलों के लिए LOB संग्रहण> 1MB से बेहतर प्रदर्शन करता है, इसलिए पॉल रान्डल का परीक्षण कहता है । यह कार्यभार 256KB-1MB पर निर्भर है और आमतौर पर <256KB पर अधिक खराब है।
  • कुछ वातावरणों में फिल्स््रीम के लिए एक बड़ा प्लस यह है कि यह बफर पूल को बायपास करता है और इसके बजाय विंडोज सिस्टम कैश का उपयोग करता है।
  • यदि आप फ़ाइलों को एक फाइल सिस्टम पर रखते हैं, तो आप डेटाबेस रिकॉर्ड के साथ लेनदेन की निरंतरता खो देते हैं। आपने लाखों अलग-अलग फ़ाइलों के बैकअप के ओवरहेड को भी जोड़ दिया है, जो परेशानी भरा हो सकता है।

Filestream के लिए pro और con जीतें और देखें कि क्या यह आपके मामले में फिट बैठता है। हमारे मामले में, हमने एक अलग मार्ग लिया है और डेटाबेस के विभाजन का विकल्प चुना है ताकि हम आंशिक उपलब्धता / टुकड़े-टुकड़े को बहाल कर सकें ।

एक विकल्प जो हमारे पास उपलब्ध नहीं था, जो आपके पास पुराने / संग्रह फ़ाइल समूह को केवल-पढ़ने के लिए चिह्नित करना है। रीड-ओनली फाइलग्रुप (s) को तब अनजाने में बैकअप दिया जा सकता है।

यदि आपका स्टैण्डर्ड 2005 स्टैण्डर्ड (विभाजन एक एंटरप्राइज एडिशन फीचर है) और आपके पास केवल इतिहास के लिए रीड-ओनली का विकल्प है, तो आप इस पुराने तरीके से निपट सकते हैं।

  • अपनी तालिका को विभाजित करें। आप प्रति माह सक्रिय / इतिहास मार्ग या दिनांक आधारित उदाहरण तालिका पर विचार कर सकते हैं।
  • ऐतिहासिक डेटा को केवल पढ़ने के लिए फ़ाइलग्रुप पर रखें और जब आप आगे डेटा संग्रहीत करते हैं, तब ही इसका बैकअप लें। अपने उपयोगकर्ताओं को सुनिश्चित करें कि यह बैकअप समय में कटौती करता है। जब आपको आंशिक उपलब्धता सुविधा नहीं मिली हो, तो पुनर्स्थापना में कुछ समय लग सकता है।
  • तालिकाओं पर एक विभाजित दृश्य बनाएँ ।

एक अंतिम विकल्प (जिसे हम हमारे 3TB ब्लॉब के लिए विचार कर रहे हैं) फ़ाइल डेटा को एक दस्तावेज़ डेटाबेस या क्लाउड स्टोरेज (जैसे AmazonS3 , Azure BLOB स्टोरेज ) में स्थानांतरित करना है । यह मेरे द्वारा पहले उल्लेख की गई लेन-देन की निरंतरता की समस्या को पेश करता है, लेकिन यह उन महंगे SQL सर्वर से लोड को दूर ले जाता है।


3

SQL सर्वर में FILESTREAM सुविधा का प्रयास करें,

FILESTREAM SQL सर्वर डेटाबेस इंजन को NTFS फाइल सिस्टम के साथ फाइल सिस्टम पर फाइल के रूप में वर्बिनरी (अधिकतम) बाइनरी बड़े ऑब्जेक्ट (BLOB) डेटा को स्टोर करके एकीकृत करता है।

इसके बारे में अच्छे लेख

  1. SQL सर्वर FileStream का एक परिचय
  2. BLOB या नहीं BLOB करने के लिए: एक डेटाबेस या एक फाइल सिस्टम में बड़ी वस्तु भंडारण
  3. FILESTREAM संग्रहण SQL सर्वर 2008 में
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.