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:
- 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.
- 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:
- Cara mengaktifkan fitur FILESTREAM.
- Cara membuat dan mengonfigurasi filegroup FILESTREAM dan wadah data FILESTREAM.
- Cara menyimpan dan mengakses data dari tabel yang diaktifkan FILESTREAM.
Demo:
Dalam demo ini, saya akan menggunakan:
- Server Basis Data :SQL Server 2017
- Perangkat Lunak :SQL Server Management Studio
- Basis Data :FileStream_Demo
Konfigurasikan Akses FILESTREAM di Database SQL Server
Untuk mengonfigurasi FileStream di SQL Server, buat perubahan berikut pada SQL Server.
- Aktifkan fitur FILESTREAM dari SQL Server Configuration Manager.
- Aktifkan tingkat akses FILESTREAM pada instance SQL Server.
- 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:
- “RootDirectory ” untuk menyimpan lokasi file.
- “Nama File ” untuk menyimpan nama file.
- “FileAttribute ” untuk menyimpan atribut File (Raw/Directory.
- “TanggalBuat File ” untuk menyimpan waktu pembuatan file.
- “Ukuran File ” untuk menyimpan Ukuran file.
- “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:
- Pengenalan FILESTREAM dan apa saja manfaatnya.
- Cara mengaktifkan fitur FILESTREAM pada instance SQL server.
- Membuat dan Mengonfigurasi penyimpanan data FILESTREAM dan Filegroups.
- Lakukan Sisipkan dan Hapus File dari penyimpanan data FILESTREAM.
Di artikel mendatang, saya akan menjelaskan:
- Cara mencadangkan dan memulihkan basis data yang mendukung FILESTREAM.
- Menyiapkan replikasi dan pembagian tabel di tabel FILESTREAM.
Tetap disini!