Database
 sql >> डेटाबेस >  >> RDS >> Database

FILESTREAM का उपयोग करके SQL डेटाबेस में फ़ाइलें संग्रहीत करना - भाग 1

FILESTREAM को Microsoft द्वारा 2008 में पेश किया गया था। इसका उद्देश्य असंरचित फ़ाइलों को अधिक प्रभावी ढंग से संग्रहीत और प्रबंधित करना था। FILESTREAM को पेश करने से पहले, SQL सर्वर में डेटा को स्टोर करने के लिए निम्नलिखित तरीकों का इस्तेमाल किया गया था:

  1. असंरचित फ़ाइलें SQL सर्वर तालिका के VARBINARY या IMAGE कॉलम में संग्रहीत की जा सकती हैं। यह दृष्टिकोण लेन-देन की स्थिरता बनाए रखने के लिए प्रभावी है और फ़ाइल प्रबंधन जटिलता को कम करता है, लेकिन जब क्लाइंट एप्लिकेशन SQL तालिका से डेटा पढ़ता है, तो यह SQL मेमोरी का उपयोग करता है जिससे खराब प्रदर्शन होता है।
  2. एसक्यूएल टेबल में पूरी फाइल को स्टोर करने के बजाय, एसक्यूएल टेबल में असंरचित फाइल के भौतिक स्थान को स्टोर करें। यह दृष्टिकोण बहुत बड़ा प्रदर्शन सुधार देता है, लेकिन यह सुनिश्चित नहीं करता है कि लेन-देन की स्थिरता के अलावा फ़ाइल प्रबंधन भी मुश्किल था।

FILESTREAM फीचर बहुत प्रभावी है क्योंकि यह NT फाइल सिस्टम में BLOB फाइलों को स्टोर करने की अनुमति देता है और ट्रांजेक्शनल कंसिस्टेंसी को बनाए रखता है। जब क्लाइंट एप्लिकेशन SQL सर्वर बफर की मेमोरी का उपयोग करने के बजाय FILESTREAM कंटेनर से डेटा पढ़ता है, तो यह Nthe T सिस्टम कैश का उपयोग करता है जो प्रदर्शन को बेहतर बनाता है।

FILESTREAM एक डेटाटाइप नहीं है। यह एक विशेषता है जिसे VARBINARY(MAX) कॉलम को सौंपा जा सकता है। जब FILESTREAM विशेषता को VARBINARY(MAX) कॉलम असाइन किया जाता है, तो इसे FILESTREAM कॉलम कहा जाता है। FILESTREAM कॉलम में संग्रहीत डेटा NT सिस्टम में डिस्क फ़ाइल के रूप में संग्रहीत किया जाएगा, और फ़ाइल का पॉइंटर तालिका में संग्रहीत किया जाता है। FILESTREAM विशेषता वाले VARBINARY (अधिकतम) कॉलम में तालिका में 2 GB संग्रहीत करने की सीमा नहीं है। इसलिए, हम बड़ी फ़ाइलों को भी स्टोर कर सकते हैं।

इस लेख में, मैं इस प्रकार प्रदर्शित करने जा रहा हूँ:

  1. FILESTREAM सुविधा को कैसे सक्षम करें।
  2. FILESTREAM फ़ाइल समूह और FILESTREAM डेटा कंटेनर कैसे बनाएं और कॉन्फ़िगर करें।
  3. FILESTREAM सक्षम तालिकाओं से डेटा कैसे संग्रहीत और एक्सेस करें।

डेमो:

इस डेमो में, मैं उपयोग करने जा रहा हूँ:

  1. डेटाबेस सर्वर :SQL सर्वर 2017
  2. सॉफ्टवेयर :SQL सर्वर प्रबंधन स्टूडियो
  3. डेटाबेस :FileStream_Demo

SQL सर्वर डेटाबेस में FILESTREAM एक्सेस कॉन्फ़िगर करें

SQL सर्वर में FileStream को कॉन्फ़िगर करने के लिए, SQL सर्वर में निम्नलिखित परिवर्तन करें।

  1. SQL सर्वर कॉन्फ़िगरेशन प्रबंधक से FILESTREAM सुविधा को सक्षम करें।
  2. एसक्यूएल सर्वर इंस्टेंस पर तेह FILESTREAM पहुंच स्तर सक्षम करें।
  3. BLOB डेटा स्टोर करने के लिए एक FILESTREAM फाइलग्रुप और एक फाइलस्ट्रीम कंटेनर बनाएं।

FILESTREAM सुविधा सक्षम करें

किसी भी डेटाबेस पर फ़ाइलस्ट्रीम को सक्षम करने के लिए, सबसे पहले SQL सर्वर इंस्टेंस पर फ़ाइलस्ट्रीम सुविधा को सक्षम करें। ऐसा करने के लिए, SQL सर्वर कॉन्फ़िगरेशन प्रबंधक खोलें, SQL इंस्टेंस पर राइट-क्लिक करें, गुण चुनें , जैसा कि निम्न चित्र में दिखाया गया है:

सर्वर गुणों को कॉन्फ़िगर करने के लिए एक संवाद बॉक्स खुलता है। FILESTREAM . पर स्विच करें टैब। T-SQL पहुंच के लिए FILESTREAM सक्षम करें का चयन करें . I/O पहुंच के लिए FILESTREAM सक्षम करें Select चुनें और फिर दूरस्थ क्लाइंट को FILESTREAM डेटा तक पहुंच की अनुमति दें . चुनें . Windows साझा नाम . में टेक्स्ट बॉक्स में, फ़ाइलों को संग्रहीत करने के लिए निर्देशिका का नाम प्रदान करें। निम्न चित्र देखें:

ठीक क्लिक करें और SQL सेवा को पुनरारंभ करें।

SQL सर्वर इंस्टेंस पर FILESTREAM एक्सेस लेवल सक्षम करें

FILESTREAM सुविधा सक्षम होने के बाद, FILESTREAM पहुंच स्तर बदलें। फ़ाइलस्ट्रीम एक्सेस स्तर को बदलने के लिए, निम्न क्वेरी निष्पादित करें:

EXEC sp_configure filestream_access_level, 2
RECONFIGURE

उपरोक्त क्वेरी में, नीचे दिए गए पैरामीटर मान्य मान हैं:

0 का अर्थ है SQL इंस्टेंस के लिए FILESTREAM समर्थन अक्षम है।

1 का अर्थ है T-SQL के लिए FILESTREAM समर्थन सक्षम है।

2 का अर्थ है T-SQL और Win32 स्ट्रीमिंग एक्सेस के लिए FILESTREAM समर्थन सक्षम है।

आप SQL सर्वर प्रबंधन स्टूडियो का उपयोग करके FILESTREAM पहुंच स्तर को बदल सकते हैं। ऐसा करने के लिए, SQL सर्वर कनेक्शन पर राइट-क्लिक करें>> गुण चुनें>> सर्वर गुण संवाद बॉक्स में, फ़ाइलस्ट्रीम पहुंच स्तर select चुनें ड्रॉप-डाउन बॉक्स से, और पूर्ण एक्सेस सक्षम select चुनें , जैसा कि निम्न चित्र में दिखाया गया है:

पैरामीटर बदलने के बाद, SQL सर्वर सेवाओं को पुनरारंभ करें।

FILESTREAM फ़ाइल समूह और डेटा फ़ाइलें जोड़ें

एक बार FILESTREAM सक्षम हो जाने पर, FILESTREAM फ़ाइल समूह और FILESTREAM कंटेनर जोड़ें।

ऐसा करने के लिए, FileStream-Demo . पर राइट-क्लिक करें डेटाबेस>> गुणों select का चयन करें>> डेटाबेस गुण . के बाएं फलक में संवाद बॉक्स में, फ़ाइल समूह select चुनें>> FILESTREAM ग्रिड में, फ़ाइल समूह जोड़ें . क्लिक करें बटन>> फ़ाइल समूह को डमी दस्तावेज़ के रूप में नाम दें . निम्न चित्र देखें:

फ़ाइल समूह बनने के बाद, डेटाबेस गुण संवाद बॉक्स में, फ़ाइलें . चुनें और Add बटन पर क्लिक करें। डेटाबेस फ़ाइलें ग्रिड सक्षम करता है। तार्किक नाम कॉलम में, नाम प्रदान करें, – डमी-दस्तावेज़ . फ़ाइल प्रकार . में FILESTREAM डेटा चुनें ड्रॉप डाउन बॉक्स। डमी-दस्तावेज़ का चयन करें फ़ाइल समूह . में कॉलम। पथ . में कॉलम, निर्देशिका स्थान प्रदान करें जहां फ़ाइलें संग्रहीत की जाएंगी (ई:\ डमी-दस्तावेज़)। निम्न चित्र देखें:

वैकल्पिक रूप से, आप निम्न T-SQL क्वेरी निष्पादित करके FILESTREAM फ़ाइल समूह और कंटेनर जोड़ सकते हैं:

USE [master]
GO
ALTER DATABASE [FileStream_Demo] ADD FILEGROUP [Dummy-Documents] CONTAINS FILESTREAM
GO
ALTER DATABASE [FileStream_Demo] ADD FILE ( NAME = N'Dummy-Documents', FILENAME = N'E:\Dummy-Documents' ) TO FILEGROUP [Dummy-Documents]
GO

यह सत्यापित करने के लिए कि फाइलस्ट्रीम कंटेनर बनाया गया है, विंडोज एक्सप्लोरर खोलें और "ई:\ डमी-दस्तावेज़" निर्देशिका पर नेविगेट करें।

जैसा कि ऊपर की छवि में दिखाया गया है, $FSLOG निर्देशिका और filestream.hdr फ़ाइल बनाई गई है। $FSLOG SQL सर्वर T-Log की तरह है, और filestream.hdr FILESTREAM का मेटाडेटा शामिल है। सुनिश्चित करें कि आप उन फ़ाइलों को परिवर्तित या संपादित नहीं करते हैं।

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

इस डेमो में, हम कंप्यूटर से विभिन्न फाइलों को स्टोर करने के लिए एक टेबल बनाएंगे। तालिका में निम्नलिखित स्तंभ हैं:

  1. रूटडायरेक्टरी फ़ाइल स्थान संग्रहीत करने के लिए कॉलम।
  2. फ़ाइल नाम फ़ाइल का नाम संग्रहीत करने के लिए कॉलम।
  3. फ़ाइल विशेषता फ़ाइल विशेषता को संग्रहीत करने के लिए कॉलम (रॉ/डायरेक्टरी।
  4. FileCreateDate फ़ाइल निर्माण समय संग्रहीत करने के लिए कॉलम।
  5. फ़ाइल आकार फ़ाइल के आकार को संग्रहीत करने के लिए कॉलम।
  6. FileStreamCol फ़ाइल की सामग्री को बाइनरी प्रारूप में संग्रहीत करने के लिए कॉलम।

FILESTREAM कॉलम के साथ SQL टेबल बनाएं

एक बार FILESTREAM कॉन्फ़िगर हो जाने पर, SQL सर्वर तालिका में विभिन्न फ़ाइलों को संग्रहीत करने के लिए FILESTREAM कॉलम के साथ एक SQL तालिका बनाएं। जैसा कि मैंने ऊपर उल्लेख किया है, FILESTREAM एक डेटाटाइप नहीं है। यह एक विशेषता है जिसे हम FILESTREAM-सक्षम तालिका में varbinary(max) कॉलम में जोड़ते हैं। जब आप एक FILESTREAM-सक्षम तालिका बनाते हैं, तो सुनिश्चित करें कि आप एक UNIQUEIDENTIFIER जोड़ते हैं कॉलम जिसमें ROWGUIDCOL . है और अद्वितीय विशेषताएँ।

FILESTREAM-सक्षम तालिका बनाने के लिए निम्न स्क्रिप्ट निष्पादित करें:

Use [FileStream_Demo]
go
Create Table [DummyDocuments]
(
    ID uniqueidentifier ROWGUIDCOL unique NOT NULL,
    RootDirectory varchar(max),
    FileName varchar(max),
    FileAttribute varchar(150),
    FileCreateDate datetime,
    FileSize numeric(10,5),
    FileStreamCol varbinary (max) FILESTREAM
)

तालिका में डेटा डालें

मेरे पास WorldWide_Importors.xls . है कंप्यूटर में "ई:दस्तावेज़" स्थान पर संग्रहीत दस्तावेज़। OPENROWSET(थोक) . का उपयोग करें डिस्क से इसकी सामग्री को VARBINARY(max) . पर लोड करने के लिए चर। फिर वेरिएबल को FileStreamCol . में स्टोर करें (VARBINARY(max)) डमी दस्तावेज़ . का कॉलम टी टेबल। ऐसा करने के लिए, निम्न स्क्रिप्ट चलाएँ:

Use [FileStream-Demo]
Go
DECLARE @Document AS VARBINARY(MAX)
 
-- Load the image data
SELECT @Document = CAST(bulkcolumn AS VARBINARY(MAX))
      FROM OPENROWSET(
            BULK
            'E:\Documents\WorldWide_Importors.xls',
            SINGLE_BLOB ) AS Doc
            
-- Insert the data to the table           
INSERT INTO [DummyDocuments] (ID, RootDirectory,FileName, FileAttribute, FileCreateDate,FileSize,FileStreamCol)
SELECT NEWID(), 'E:\Documents','WorldWide_Importors.xls','Raw',getdate(),10, @Document

FILESTREAM डेटा एक्सेस करें

FILESTREAM डेटा को T-SQL और प्रबंधित API का उपयोग करके एक्सेस किया जा सकता है। जब FILESTREAM कॉलम को T-SQL क्वेरी का उपयोग करके एक्सेस किया जाता है, तो यह डेटा फ़ाइल की सामग्री को पढ़ने और क्लाइंट एप्लिकेशन को डेटा भेजने के लिए SQL मेमोरी का उपयोग करता है। जब FILESTREAM कॉलम को Win32 प्रबंधित API का उपयोग करके एक्सेस किया जाता है, तो यह SQL सर्वर मेमोरी का उपयोग नहीं करता है। यह एनटी फाइल सिस्टम की स्ट्रीमिंग क्षमता का उपयोग करता है जो प्रदर्शन लाभ देता है।

T-SQL का उपयोग करके FILESTREAM डेटा एक्सेस करें

जैसा कि मैंने लेख की शुरुआत में उल्लेख किया है, FILESTREAM एक तालिका कॉलम को निर्दिष्ट एक विशेषता है जिसमें varbinary (अधिकतम) डेटा प्रकार है, इसलिए, इसे तालिका के किसी भी अन्य कॉलम की तरह एक्सेस किया जा सकता है। तालिका की सभी जानकारी के साथ FILESTREAM डेटा पुनर्प्राप्त करने के लिए, क्वेरी के नीचे निष्पादित करें

Use [FileStream-Demo]
go
select RootDirectory,FileName,FileAttribute,FileCreateDate,FileSize,FileStreamCol from DummyDocuments

नीचे क्वेरी का आउटपुट दिया गया है:

जैसा कि ऊपर की छवि में दिखाया गया है, "WorldWide_Importors.xls" दस्तावेज़ को एक BLOB में बदल दिया गया है जो "FileStreamCol" कॉलम में संग्रहीत है।

प्रबंधित API का उपयोग करके FILESTREAM डेटा तक पहुंचें

हालांकि Win32 API का उपयोग करके FILESTREAM को एक्सेस करने से एक प्रदर्शन और अन्य लाभ मिलते हैं, लेकिन इसमें T-SQL सिंटैक्स की तुलना में अलग और कठिन सिंटैक्स होते हैं, जिससे डेटा तक पहुंचना मुश्किल हो जाता है। सबसे पहले, FILESTREAM डेटा स्टोर पर फ़ाइल का पता लगाने के लिए, हमें FILESTREAM डेटा स्टोर में फ़ाइल को विशिष्ट रूप से पहचानने के लिए तार्किक पथ की पहचान करनी चाहिए। हम इसे Pathname() . का उपयोग करके कर सकते हैं FILESTREAM कॉलम की विधि। यह केस सेंसिटिव है।

फ़ाइल का पथ प्राप्त करने के बाद, एक्सेस करने के लिए, हमें लेनदेन शुरू करें का उपयोग करके लेनदेन संदर्भ प्राप्त करना होगा। तरीका। एक बार लेन-देन संदर्भ प्राप्त हो जाने के बाद, हम इसे SQLFileStream . का उपयोग करके एक्सेस कर सकते हैं कक्षा।

नीचे दिया गया कोड WorldWide_Importors.xls . के लिए स्थानीय पथ प्राप्त करता है FILESTREAM डेटा स्टोर में दस्तावेज़।

SELECT 
      RootDirectory, 
	 FileName,
	 FileAttribute,
	 FileCreateDate,
	 FileSize,
      FileStreamCol.PathName() AS FilePath
FROM DummyDocuments

क्वेरी आउटपुट:

FILESTREAM कंटेनर से फ़ाइलें हटाएं

फ़ाइलों को हटाना सीधा है। FILESTREAM सक्षम SQL तालिका से फ़ाइल को निकालने के लिए आपको डिलीट क्वेरी को चलाने की आवश्यकता है। भले ही रिकॉर्ड को तालिकाओं से हटा दिया गया हो, फ़ाइल भौतिक रूप से FILSTREAM डेटा स्टोर में उपलब्ध होगी। इसे गारबेज कलेक्टर द्वारा हटाया जाएगा। चेकपॉइंट घटना होने पर कचरा कलेक्टर प्रक्रिया निष्पादित होती है। एक स्पष्ट चेकपॉइंट देकर, आप इसे तालिका से हटाने के तुरंत बाद हटा सकते हैं।

SQL तालिका से फ़ाइलें हटाने की क्वेरी:

Use [FileStream_Demo]
go
delete from DummyDocuments where ID='0D640ABC-8CF1-41E0-9FA8-28171047129F'

सारांश

इस लेख में, मैंने कवर किया है:

  1. FILESTREAM का परिचय और इसके क्या लाभ हैं।
  2. SQL सर्वर इंस्टेंस पर FILESTREAM सुविधा को कैसे सक्षम करें।
  3. FILESTREAM डेटा स्टोर और फ़ाइल समूह बनाएं और कॉन्फ़िगर करें।
  4. FILESTREAM डेटा स्टोर से फ़ाइलें डालें और हटाएं।

भविष्य के लेखों में, मैं समझाने जा रहा हूँ:

  1. FILESTREAM सक्षम डेटाबेस का बैकअप और पुनर्स्थापना कैसे करें।
  2. FILESTREAM तालिकाओं में प्रतिकृति और तालिका विभाजन सेट करना।

बने रहें!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. IBM SPSS में ODBC डेटा का विश्लेषण

  2. टी-एसक्यूएल बग, नुकसान, और सर्वोत्तम अभ्यास - सबक्वेरी

  3. एसक्यूएल में एक इंडेक्स क्या है?

  4. कारपूलिंग के लिए डेटा मॉडल बनाना

  5. कैसे सुनिश्चित करें कि डेटाबेस में खंडित अनुक्रमणिकाएं नहीं हैं