sql >> Databáze >  >> RDS >> Database

Ukládání souborů do SQL databáze pomocí FILESTREAM – část 1

FILESTREAM byl představen společností Microsoft v roce 2008. Účelem bylo efektivněji ukládat a spravovat nestrukturované soubory. Před zavedením FILESTREAM se pro ukládání dat na SQL server používaly následující přístupy:

  1. Nestrukturované soubory mohou být uloženy ve sloupci VARBINARY nebo IMAGE tabulky serveru SQL. Tento přístup je účinný pro zachování transakční konzistence a snižuje složitost správy souborů, ale když klientská aplikace čte data z tabulky SQL, používá paměť SQL, což vede ke špatnému výkonu.
  2. Místo ukládání celého souboru do tabulky SQL uložte fyzické umístění nestrukturovaného souboru do tabulky SQL. Tento přístup poskytuje obrovské zlepšení výkonu, ale nezajišťuje transakční konzistenci, navíc správa souborů byla také obtížná.

Funkce FILESTREAM je velmi efektivní, protože umožňuje ukládání souborů BLOB v systému souborů NT a zachovává transakční konzistenci. Když klientská aplikace čte data z kontejneru FILESTREAM, místo využití paměti vyrovnávací paměti serveru SQL Server používá mezipaměť systému Nthe T, která zlepšuje výkon.

FILESTREAM není datový typ. Je to atribut, který lze přiřadit sloupci VARBINARY(MAX). Když je sloupec VARBINARY(MAX) přiřazen atributu FILESTREAM, nazývá se sloupec FILESTREAM. Data uložená ve sloupci FILESTREAM budou v systému NT uložena jako diskový soubor a ukazatel na soubor je uložen v tabulce. Sloupec VARBINARY(max) s přiřazeným atributem FILESTREAM nemá limit pro uložení 2 GB v tabulce. Můžeme tedy ukládat i velké soubory.

V tomto článku předvedu následující:

  1. Jak povolit funkci FILESTREAM.
  2. Jak vytvořit a nakonfigurovat skupiny souborů FILESTREAM a datový kontejner FILESTREAM.
  3. Jak ukládat data z tabulek s povoleným FILESTREAM a přistupovat k nim.

Ukázka:

V této ukázce použiji:

  1. Databázový server :SQL Server 2017
  2. Software :SQL Server Management Studio
  3. Databáze :FileStream_Demo

Konfigurace přístupu FILESTREAM v databázi SQL Server

Chcete-li nakonfigurovat FileStream na serveru SQL Server, proveďte na serveru SQL Server následující změny.

  1. Povolte funkci FILESTREAM z SQL Server Configuration Manager.
  2. Povolte úroveň přístupu FILESTREAM na instanci SQL Server.
  3. Vytvořte skupinu souborů FILESTREAM a kontejner FileStream pro ukládání dat BLOB.

Povolit funkci FILESTREAM

Chcete-li povolit FileStream na jakékoli databázi, nejprve povolte funkci FileStream na instanci SQL Server. Chcete-li to provést, otevřete správce konfigurace serveru SQL, klepněte pravým tlačítkem myši na Instance SQL a vyberte Vlastnosti , jak je znázorněno na následujícím obrázku:

Otevře se dialogové okno pro konfiguraci vlastností serveru. Přepněte na FILESTREAM tab. Vyberte Povolit FILESTREAM pro přístup T-SQL . Vyberte Povolit FILESTREAM pro přístup I/O a poté vyberte Povolit vzdálenému klientovi přístup k datům FILESTREAM . V Název sdílené položky systému Windows do textového pole zadejte název adresáře pro uložení souborů. Viz následující obrázek:

Klepněte na tlačítko OK a restartujte službu SQL.

Povolte úroveň přístupu FILESTREAM na instanci serveru SQL

Jakmile je funkce FILESTREAM povolena, změňte úroveň přístupu FILESTREAM. Chcete-li změnit úroveň přístupu k FileStream, proveďte následující dotaz:

EXEC sp_configure filestream_access_level, 2
RECONFIGURE

Ve výše uvedeném dotazu jsou níže uvedené parametry platnými hodnotami:

0 znamená podpora FILESTREAM pro instanci SQL je zakázána.

1 znamená je povolena podpora FILESTREAM pro T-SQL.

2 znamená je povolena podpora FILESTREAM pro přístup ke streamování T-SQL a Win32.

Úroveň přístupu FILESTREAM můžete změnit pomocí SQL Server Management Studio. Chcete-li to provést, klikněte pravým tlačítkem na připojení k serveru SQL>> vyberte Vlastnosti>> V dialogovém okně vlastností serveru vyberte Úroveň přístupu k FileStream z rozevíracího pole a vyberte možnost Plný přístup povolen , jak je znázorněno na následujícím obrázku:

Po změně parametru restartujte služby SQL Server.

Přidat skupinu souborů a datové soubory FILESTREAM

Jakmile je FILESTREAM povolen, přidejte skupinu souborů FILESTREAM a kontejner FILESTREAM.

Chcete-li to provést, klepněte pravým tlačítkem myši na FileStream-Demo databáze>> vyberte Vlastnosti>> V levém podokně Vlastnosti databáze dialogovém okně vyberte Skupiny souborů>> V mřížce FILESTREAM klikněte na Přidat skupinu souborů tlačítko>> Pojmenujte skupinu souborů jako Dummy Document . Viz následující obrázek:

Po vytvoření skupiny souborů vyberte v dialogovém okně Vlastnosti databáze soubory a klepněte na tlačítko Přidat. Mřížka databázových souborů umožňuje. Ve sloupci Logický název zadejte název – Dummy-Document . V části Typ souboru vyberte možnost FILESTREAM Data rozevíracím seznamu. Vyberte Dummy-Document veSkupině souborů sloupec. Na stránce Cesta zadejte umístění adresáře, kde budou soubory uloženy (E:\Dummy-Documents). Viz následující obrázek:

Případně můžete přidat skupinu souborů a kontejnery FILESTREAM provedením následujícího dotazu T-SQL:

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

Chcete-li ověřit, že byl kontejner FileStream vytvořen, otevřete Průzkumníka Windows a přejděte do adresáře „E:\Dummy-Document“.

Jak je znázorněno na obrázku výše, adresář $FSLOG a soubor filestream.hdr soubor byl vytvořen. $FSLOG je jako SQL server T-Log a filestream.hdr obsahuje metadata FILESTREAM. Ujistěte se, že tyto soubory neměníte ani neupravujete.

Ukládání souborů do tabulky SQL

V této ukázce vytvoříme tabulku pro ukládání různých souborů z počítače. Tabulka má následující sloupce:

  1. RootDirectory ” pro uložení umístění souboru.
  2. Položka „Název souboru ” pro uložení názvu souboru.
  3. Položka „FileAttribute ” pro uložení atributu File (Raw/Directory.
  4. FileCreateDate ” pro uložení času vytvoření souboru.
  5. Velikost souboru ” pro uložení velikosti souboru.
  6. Položka „FileStreamCol ” pro uložení obsahu souboru v binárním formátu.

Vytvořte tabulku SQL se sloupcem FILESTREAM

Jakmile se FILESTREAM nakonfiguruje, vytvořte tabulku SQL se sloupci FILESTREAM pro ukládání různých souborů do tabulky serveru SQL. Jak jsem uvedl výše, FILESTREAM není datový typ. Je to atribut, který přidáváme do sloupce varbinary(max) v tabulce s povoleným souborem FILESTREAM. Při vytváření tabulky s podporou FILESTREAM nezapomeňte přidat UNIQUEIDENTIFIER sloupec, který má ROWGUIDCOL a JEDINEČNÉ atributy.

Chcete-li vytvořit tabulku podporující FILESTREAM, spusťte následující skript:

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
)

Vložit data do tabulky

Mám soubor WorldWide_Importors.xls dokument uložený v počítači v umístění „E:\Documents“. Použijte OPENROWSET (hromadné) načíst jeho obsah z disku do VARBINARY(max) variabilní. Poté proměnnou uložte do FileStreamCol (VARBINARY(max)) sloupce DummyDocumen t stůl. Chcete-li to provést, spusťte následující skript:

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

Přístup k datům FILESTREAM

K datům FILESTREAM lze přistupovat pomocí T-SQL a Managed API. Když se ke sloupci FILESTREAM přistupuje pomocí dotazu T-SQL, používá paměť SQL ke čtení obsahu datového souboru a odesílání dat do klientské aplikace. Když se ke sloupci FILESTREAM přistupuje pomocí Win32 Managed API, nepoužívá paměť SQL Server. Využívá možnosti streamování souborového systému NT, což přináší výhody výkonu.

Přístup k datům FILESTREAM pomocí T-SQL

Jak jsem zmínil na začátku článku, FILESTREAM je atribut přiřazený sloupci tabulky, který má datový typ varbinary(max), lze k němu tedy přistupovat jako ke kterémukoli jinému sloupci tabulky. Chcete-li načíst data FILESTREAM spolu se všemi informacemi v tabulce, proveďte níže uvedený dotaz

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

Níže je výstup dotazu:

Jak je znázorněno na obrázku výše, dokument „WorldWide_Importors.xls“ byl převeden na objekt BLOB, který je uložen ve sloupci „FileStreamCol“.

Přístup k datům FILESTREAM pomocí spravovaného rozhraní API

Přístup k FILESTREAM pomocí Win32 API sice poskytuje výkon a další výhody, ale má odlišnou a obtížnou syntaxi než syntaxe T-SQL, což ztěžuje přístup k datům. Za prvé, abychom našli soubor v datovém úložišti FILESTREAM, musíme identifikovat logickou cestu k jedinečné identifikaci souboru v datovém úložišti FILESTREAM. Můžeme to udělat pomocí Pathname() metoda sloupce FILESTREAM. Rozlišují se malá a velká písmena.

Po načtení cesty k souboru, abychom získali přístup, musíme získat kontext transakce pomocí Zahájit transakci metoda. Jakmile získáme kontext transakce, můžeme k němu přistupovat pomocí SQLFileStream třída.

Níže uvedený kód získá místní cestu k souboru WorldWide_Importors.xls dokument v datovém úložišti FILESTREAM.

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

Výstup dotazu:

Odstranit soubory z kontejneru FILESTREAM

Mazání souborů je jednoduché. Chcete-li soubor odstranit z tabulky SQL s povoleným FILESTREAM, musíte spustit odstraňovací dotaz. I když byl záznam z tabulek odstraněn, soubor bude fyzicky dostupný v datovém úložišti FILSTREAM. Smaže to Garbage Collector. Proces Garbage Collector se spustí, když dojde k události kontrolního bodu. Zadáním explicitního kontrolního bodu jej můžete smazat ihned po odstranění z tabulky.

Dotaz na odstranění souborů z tabulky SQL:

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

Shrnutí

V tomto článku jsem se zabýval:

  1. Představení FILESTREAM a jaké jsou jeho výhody.
  2. Jak povolit funkci FILESTREAM na instanci serveru SQL.
  3. Vytvořte a nakonfigurujte úložiště dat FILESTREAM a skupiny souborů.
  4. Proveďte vkládání a odstraňování souborů z úložiště dat FILESTREAM.

V budoucích článcích vysvětlím:

  1. Jak zálohovat a obnovit databázi s povoleným FILESTREAM.
  2. Nastavení replikace a rozdělení tabulek v tabulkách FILESTREAM.

Zůstaňte naladěni!


  1. Jak může CTE pomoci při psaní složitých a účinných dotazů:Perspektiva výkonu

  2. Jak COALESCE() funguje v MariaDB

  3. potřeba vrátit dvě sady dat se dvěma různými klauzulemi where

  4. Nejprve seřaďte podle konkrétní hodnoty pole