Küçük bir demo sitesi yaptım ve üzerinde sql sunucusundaki bir resim sütununda görüntüleri saklıyorum. Aklıma takılan birkaç soru var...
Bu kötü bir fikir mi?
Büyüdüğünde sitemdeki performansı etkileyecek mi?
Alternatif, görüntüyü diskte saklamak ve veritabanında yalnızca görüntüye yapılan referansı saklamak olabilir. Bu, birçok insanın yaşadığı yaygın bir ikilem olmalı. Tavsiyeye açığım ve eğer yapabilirsem daha az hata yapmaktan mutluluk duyarım.
Microsoft Research tarafından hazırlanan To Blob or Not To Blob adlı gerçekten iyi bir makale var.
Çok sayıda performans testi ve analizden sonra vardıkları sonuç şudur:
resimlerinizin veya belgelerinizin boyutu genellikle 256KB'nin altındaysa, bunları bir veritabanı VARBINARY sütununda depolamak daha verimlidir
Resimlerinizin veya belgelerinizin boyutu genellikle 1 MB'ın üzerindeyse, bunları dosya sisteminde depolamak daha verimlidir (ve SQL Server 2008'in FILESTREAM özelliği ile bunlar hala işlem kontrolü altındadır ve veritabanının bir parçasıdır)
Bu ikisi arasında, kullanımınıza bağlı olarak biraz karışık
Resimlerinizi bir SQL Server tablosuna koymaya karar verirseniz, bu resimleri saklamak için ayrı bir tablo kullanmanızı şiddetle tavsiye ederim - çalışan fotoğrafını çalışan tablosunda saklamayın - bunları ayrı bir tabloda tutun. Bu şekilde, sorgularınızın bir parçası olarak her zaman çalışan fotoğrafını da seçmeniz gerekmediğini varsayarsak, Çalışan tablosu yalın ve ortalama ve çok verimli kalabilir.
Dosya gruplarına giriş için Dosyalar ve Dosya Grubu Mimarisi sayfasına göz atın. Temel olarak, veritabanınızı ya en baştan büyük veri yapıları için ayrı bir dosya grubu ile oluşturursunuz ya da daha sonra ek bir dosya grubu eklersiniz. Buna "LARGE_DATA" diyelim.
Artık, VARCHAR(MAX) veya VARBINARY(MAX) sütunlarını depolaması gereken yeni bir tablo oluşturacağınız zaman, büyük veriler için bu dosya grubunu belirtebilirsiniz:
CREATE TABLE dbo.YourTable
(....... define the fields here ......)
ON Data -- the basic "Data" filegroup for the regular data
TEXTIMAGE_ON LARGE_DATA -- the filegroup for large chunks of data
Dosya grupları hakkındaki MSDN tanıtımına göz atın ve bununla oynayın!
Bir keresinde bu ikileme düştüm ve görüşler için google'da biraz araştırma yaptım. Bulduğum şey, gerçekten de birçok kişinin görüntüleri diske kaydetmeyi daha büyük görüntüler için daha iyi gördüğü, mySQL'in ise özellikle PHP gibi dillerden daha kolay erişime izin verdiğiydi.
Benzer bir soru buldum
https://stackoverflow.com/questions/4659441/mysql-blob-vs-file-for-storing-small-png-images
Son kararım, profil resmi gibi şeyler için, kullanıcı başına orada olması gereken küçük bir kare resim, mySQL'in hdd'de bir grup başparmak depolamaktan daha iyi olacağı, fotoğraf albümleri ve bunun gibi şeyler için ise klasörlerin / resim dosyalarının daha iyi olacağı yönündeydi.
Umarım yardımcı olur
Resmi bir dizinde saklamayı ve ardından veritabanında resim dosyasına bir referans saklamayı tercih ederim.
Ancak, görüntüyü veritabanında saklıyorsanız, görüntü sütununun ayrı bir dosyada bulunması için veritabanınızı bölümlere ayırmalısınız.
Dosya gruplarını kullanma hakkında daha fazla bilgiyi http://msdn.microsoft.com/en-us/library/ms179316.aspx adresinde bulabilirsiniz.