Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Menyimpan File dalam Database SQL Menggunakan FILESTREAM – Bagian 1

FILESTREAM telah diperkenalkan oleh Microsoft pada tahun 2008. Tujuannya adalah untuk menyimpan dan mengelola file yang tidak terstruktur dengan lebih efektif. Sebelum FILESTREAM diperkenalkan, pendekatan berikut digunakan untuk menyimpan data di SQL server:

  1. File tidak terstruktur dapat disimpan di kolom VARBINARY atau IMAGE dari tabel SQL Server. Pendekatan ini efektif untuk menjaga konsistensi transaksional dan mengurangi kompleksitas manajemen file, tetapi ketika aplikasi klien membaca data dari tabel SQL, aplikasi tersebut menggunakan memori SQL yang menyebabkan kinerja buruk.
  2. Daripada menyimpan seluruh file dalam tabel SQL, simpan lokasi fisik file tidak terstruktur dalam Tabel SQL. Pendekatan ini memberikan peningkatan kinerja yang besar, tetapi tidak menjamin konsistensi transaksi apalagi manajemen file juga sulit.

Fitur FILESTREAM sangat efektif karena memungkinkan penyimpanan file BLOB dalam sistem file NT dan menjaga konsistensi transaksi. Saat aplikasi klien membaca data dari wadah FILESTREAM, alih-alih menggunakan memori buffer SQL Server, aplikasi tersebut menggunakan cache sistem T yang meningkatkan kinerja.

FILESTREAM bukan tipe data. Ini adalah atribut yang dapat ditetapkan ke kolom VARBINARY(MAX). Ketika kolom VARBINARY(MAX) ditetapkan ke atribut FILESTREAM, ini disebut kolom FILESTREAM. Data yang disimpan dalam kolom FILESTREAM akan disimpan dalam sistem NT sebagai file disk, dan penunjuk file disimpan dalam tabel. Kolom VARBINARY(max) dengan atribut FILESTREAM yang ditetapkan tidak memiliki batas penyimpanan 2 GB dalam tabel. Oleh karena itu, kami juga dapat menyimpan file berukuran besar.

Dalam artikel ini, saya akan menunjukkan sebagai berikut:

  1. Cara mengaktifkan fitur FILESTREAM.
  2. Cara membuat dan mengonfigurasi filegroup FILESTREAM dan wadah data FILESTREAM.
  3. Cara menyimpan dan mengakses data dari tabel yang diaktifkan FILESTREAM.

Demo:

Dalam demo ini, saya akan menggunakan:

  1. Server Basis Data :SQL Server 2017
  2. Perangkat Lunak :SQL Server Management Studio
  3. Basis Data :FileStream_Demo

Konfigurasikan Akses FILESTREAM di Database SQL Server

Untuk mengonfigurasi FileStream di SQL Server, buat perubahan berikut pada SQL Server.

  1. Aktifkan fitur FILESTREAM dari SQL Server Configuration Manager.
  2. Aktifkan tingkat akses FILESTREAM pada instance SQL Server.
  3. Buat grup file FILESTREAM dan wadah FileStream untuk menyimpan data BLOB.

Aktifkan Fitur FILESTREAM

Untuk mengaktifkan FileStream pada database apa pun, pertama-tama aktifkan fitur FileStream pada instance SQL Server. Untuk melakukannya, buka manajer konfigurasi SQL Server, klik kanan SQL Instance, pilih Properties , seperti yang ditunjukkan pada gambar berikut:

Kotak dialog untuk mengonfigurasi properti server akan terbuka. Beralih ke FILESTREAM tab. Pilih Aktifkan FILESTREAM untuk akses T-SQL . Pilih Aktifkan FILESTREAM untuk akses I/O lalu pilih Izinkan akses klien jarak jauh ke data FILESTREAM . Di nama berbagi Windows kotak teks, berikan nama direktori untuk menyimpan file. Lihat gambar berikut:

Klik OK dan mulai ulang layanan SQL.

Aktifkan FILESTREAM Access Level pada SQL Server Instance

Setelah fitur FILESTREAM diaktifkan, ubah tingkat akses FILESTREAM. Untuk mengubah tingkat akses FileStream, jalankan kueri berikut:

EXEC sp_configure filestream_access_level, 2
RECONFIGURE

Dalam kueri di atas, parameter di bawah ini adalah nilai yang valid:

0 berarti dukungan FILESTREAM untuk instans SQL dinonaktifkan.

1 artinya dukungan FILESTREAM untuk T-SQL diaktifkan.

2 berarti dukungan FILESTREAM untuk T-SQL dan akses streaming Win32 diaktifkan.

Anda dapat mengubah tingkat akses FILESTREAM menggunakan SQL Server Management Studio. Untuk melakukannya, klik kanan koneksi SQL Server>> pilih Properties>> Di kotak dialog properti server, pilih Level Akses FileStream dari kotak tarik-turun, dan pilih Akses Penuh Diaktifkan , seperti yang ditunjukkan pada gambar berikut:

Setelah parameter diubah, mulai ulang layanan SQL Server.

Tambahkan FILESTREAM Filegroup dan File Data

Setelah FILESTREAM diaktifkan, tambahkan filegroup FILESTREAM dan wadah FILESTREAM.

Untuk melakukannya, klik kanan FileStream-Demo database>> pilih Properti>> Di panel kiri Properti Database kotak dialog, pilih Filegroups>> Dalam kisi FILESTREAM, klik Tambahkan Filegroup button>> Beri nama filegroup sebagai Dummy Document . Lihat gambar berikut:

Setelah filegroup dibuat, di kotak dialog Properti Database, pilih file dan klik tombol Tambah. Kisi file database memungkinkan. Pada kolom Logical Name, berikan nama, – Dummy-Document . Pilih Data FILESTREAM di Jenis File kotak drop-down. Pilih Dokumen-Dummy di Filegroup kolom. Di Jalur kolom, berikan lokasi direktori tempat file akan disimpan (E:\Dummy-Documents). Lihat gambar berikut:

Atau, Anda dapat menambahkan filegroup dan container FILESTREAM dengan menjalankan T-SQL Query berikut:

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

Untuk memverifikasi bahwa penampung FileStream telah dibuat, buka Windows Explorer dan navigasikan ke direktori “E:\Dummy-Document”.

Seperti yang ditunjukkan pada gambar di atas, direktori $FSLOG dan filestream.hdr file telah dibuat. $FSLOG seperti SQL server T-Log, dan filestream.hdr berisi metadata FILESTREAM. Pastikan Anda tidak mengubah atau mengedit file tersebut.

Simpan File dalam tabel SQL

Dalam demo ini, kita akan membuat tabel untuk menyimpan berbagai file dari komputer. Tabel memiliki kolom berikut:

  1. RootDirectory ” untuk menyimpan lokasi file.
  2. Nama File ” untuk menyimpan nama file.
  3. FileAttribute ” untuk menyimpan atribut File (Raw/Directory.
  4. TanggalBuat File ” untuk menyimpan waktu pembuatan file.
  5. Ukuran File ” untuk menyimpan Ukuran file.
  6. FileStreamCol ” untuk menyimpan isi file dalam format biner.

Buat Tabel SQL dengan kolom FILESTREAM

Setelah FILESTREAM dikonfigurasi, buat tabel SQL dengan kolom FILESTREAM untuk menyimpan berbagai file di tabel server SQL. Seperti yang saya sebutkan di atas, FILESTREAM bukan tipe data. Ini adalah atribut yang kami tambahkan ke kolom varbinary(max) di tabel yang mendukung FILESTREAM. Saat Anda membuat tabel yang mendukung FILESTREAM, pastikan Anda menambahkan UNIQUEIDENTIFIER kolom yang memiliki ROWGUIDCOL dan UNIK atribut.

Jalankan skrip berikut untuk membuat tabel yang mendukung 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
)

Menyisipkan Data ke Tabel

Saya memiliki WorldWide_Importors.xls dokumen yang disimpan di komputer di lokasi “E:\Documents”. Gunakan OPENROWSET(Massal) untuk memuat kontennya dari disk ke VARBINARY(max) variabel. Kemudian simpan variabel ke FileStreamCol (VARBINARY(maks)) kolom DummyDocumen t meja. Untuk melakukannya, jalankan skrip berikut:

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

Mengakses Data FILESTREAM

Data FILESTREAM dapat diakses dengan menggunakan T-SQL dan Managed API. Ketika kolom FILESTREAM diakses menggunakan kueri T-SQL, kolom tersebut menggunakan memori SQL untuk membaca konten file data dan mengirim data ke aplikasi klien. Ketika kolom FILESTREAM diakses menggunakan Win32 Managed API, tidak menggunakan memori SQL Server. Ini menggunakan kemampuan streaming sistem file NT yang memberikan manfaat kinerja.

Mengakses Data FILESTREAM Menggunakan T-SQL

Seperti yang saya sebutkan di awal artikel, FILESTREAM adalah atribut yang ditetapkan ke kolom tabel yang memiliki tipe data varbinary(max), oleh karena itu, dapat diakses seperti kolom tabel lainnya. Untuk mengambil data FILESTREAM bersama dengan semua informasi tabel, jalankan kueri di bawah ini

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

Di bawah ini adalah output dari kueri:

Seperti terlihat pada gambar di atas, dokumen “WorldWide_Importors.xls” telah diubah menjadi BLOB yang disimpan di kolom “FileStreamCol”.

Mengakses Data FILESTREAM Menggunakan Managed API

Meskipun mengakses FILESTREAM menggunakan Win32 API memberikan kinerja dan manfaat lainnya, tetapi memiliki sintaks yang berbeda dan sulit dari sintaks T-SQL yang membuatnya sulit untuk mengakses data. Pertama, untuk menemukan file di penyimpanan data FILESTREAM, kita harus mengidentifikasi jalur logis untuk mengidentifikasi file di penyimpanan data FILESTREAM secara unik. Kita dapat melakukannya dengan menggunakan Pathname() metode kolom FILESTREAM. Ini peka huruf besar/kecil.

Setelah mengambil jalur File, untuk mengakses, kita harus mendapatkan konteks transaksi dengan menggunakan Mulai Transaksi metode. Setelah konteks transaksi diperoleh, kita dapat mengaksesnya menggunakan SQLFileStream kelas.

Kode di bawah ini mendapatkan jalur lokal ke WorldWide_Importors.xls dokumen di penyimpanan data FILESTREAM.

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

Keluaran kueri:

Hapus File Dari Wadah FILESTREAM

Menghapus file sangatlah mudah. Anda perlu menjalankan kueri penghapusan untuk menghapus file dari tabel SQL yang diaktifkan FILESTREAM. Meskipun catatan telah dihapus dari tabel, file akan tersedia di penyimpanan data FILSTREAM secara fisik. Itu akan dihapus oleh Pengumpul Sampah. Proses Garbage Collector dijalankan ketika event checkpoint terjadi. Dengan memberikan pos pemeriksaan eksplisit, Anda dapat menghapusnya segera setelah menghapus dari tabel.

Kueri untuk menghapus File dari Tabel SQL:

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

Ringkasan

Dalam artikel ini, saya telah membahas:

  1. Pengenalan FILESTREAM dan apa saja manfaatnya.
  2. Cara mengaktifkan fitur FILESTREAM pada instance SQL server.
  3. Membuat dan Mengonfigurasi penyimpanan data FILESTREAM dan Filegroups.
  4. Lakukan Sisipkan dan Hapus File dari penyimpanan data FILESTREAM.

Di artikel mendatang, saya akan menjelaskan:

  1. Cara mencadangkan dan memulihkan basis data yang mendukung FILESTREAM.
  2. Menyiapkan replikasi dan pembagian tabel di tabel FILESTREAM.

Tetap disini!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. RDBMS vs NoSQL

  2. Notasi Chen

  3. Cara Memilih Baris Pertama di Setiap GROUP BY Group

  4. Apa itu indeks dalam SQL?

  5. Menghubungkan .NET di Linux ke Sumber Data ODBC