SQL Server 2008’de filestream


Veritabanı sunucuları artık sadece yapısal verileri değil yapısal olmayan verileri de tutmaya yöneliyor. Bu da gayet normal, hatta gerekli. Çünkü günümüzde oluşan verilerin büyük bir kısmı yapısal olmayan veriler kapsamına giriyor: Ses dosyaları, görüntü dosyaları, resimler…

SQL Server 2008 bu tür verileri tutmak için özel bir yapı getiriyor: Filestream.

Temel mantık şu: Veriler SQL Server’da değil, NTFS disk sisteminde duruyor. Ama bu verilere erişimi SQL Server üzerinden yapıyorsunuz. Böylelikle hem verileriniz daha bütüncül oluyor, hem onlara daha hızlı erişebiliyorsunuz hem de SQL Server’ın sağladığı transaction yönetiminden yararlanmış oluyorsunuz.

Aşağıdaki kod filestream’i nasıl kullanabileceğinize dair bir örnek içeriyor.

— Öncelikle sunucuda filestream özelliğini açmanız gerekiyor. 0 kapatmak, 1 sadece TSQL erişimine izin vermek,
— 2 hem TSQL hem de API erişimine izin vermek anlamına geliyor.

EXEC sp_configure filestream_access_level, 2
RECONFIGURE

CREATE DATABASE Archive
ON
PRIMARY ( NAME = Arch1,
FILENAME = ‘c:\data\archdat1.mdf’),
— Veritabanı filestream destekleyen bir filegroup’a sahip olmalı
— Bu örnekteki C’nin altında data klasörü önceden oluşturmuş olmalısınız
— Onun altındaki filestream1 klasörünü ise oluşturmamış olmalısınız
— Bu alt klasörü SQL Server kendisi oluşturacak
FILEGROUP FileStreamGroup1 CONTAINS FILESTREAM( NAME = Arch3,
FILENAME = ‘c:\data\filestream1’)
LOG ON ( NAME = Archlog1,
FILENAME = ‘c:\data\archlog1.ldf’)
GO

CREATE TABLE Archive.dbo.Records
(
— filestream içeren tabloda uniqueidentifier kullanılması zorunlu
[Id] [uniqueidentifier] ROWGUIDCOL NOT NULL UNIQUE,
[SerialNumber] INTEGER UNIQUE,
— filestream veri tipini varbinary(max) filestream diyerek belirtiyorsunuz
— varbinary(max)’ın normalde limiti olan 2GB filestream için geçerli değil
— filestream’de sınırınız kullandığınız diskin kapasitesi
[Chart] VARBINARY(MAX) FILESTREAM NULL
)
GO

— Null değer girmek için:
INSERT INTO Archive.dbo.Records
VALUES (newid (), 1, NULL);
GO

— empty string, varbinary(max)’a cast ederek giriyoruz
INSERT INTO Archive.dbo.Records
VALUES (newid (), 2,
CAST (” as varbinary(max)));
GO

— Normal metin, varbinary(max)’a cast ederek giriyoruz
INSERT INTO Archive.dbo.Records
VALUES (newid (), 3,
CAST (‘Seismic Data’ as varbinary(max)));
GO

SELECT * FROM Archive.dbo.Records
GO

— Update ve delete işlemlerini nasıl yapacağınız aşağıda:
UPDATE Archive.dbo.Records
SET [Chart] = CAST(‘Xray 1’ as varbinary(max))
WHERE [SerialNumber] = 2;

DELETE Archive.dbo.Records
WHERE SerialNumber = 1;
GO

Dosya sisteminde oluşan dosyaları notepad’le açarak içinde doğru metinlerin bulunduğunu görebilirsiniz. Ufak bir konu daha: Filestream’in bulunduğu yere normalde sadece SQL Server’ın servisine NTFS izni verilmiş olacaktır. Başka izinler vermeniz tavsiye edilmez.

Bu yazı SQL Server 2008 içinde yayınlandı. Kalıcı bağlantıyı yer imlerinize ekleyin.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s