2011-12-20 13 views
6

Çok sayıda görüntüyü (> 100.000) saklayan ve araştıran bir .NET uygulaması tasarlıyoruz.Görüntüleri ve küçük resimleri saklamak için filestream kullanmak iyi bir fikir midir?

Bir resim yüklediğimizde, bir küçük resim oluşturmalı ve orijinal görüntünün ve küçük resmin DB (SQL Server 2008 R2) içinde saklanması gerekir.

Ben görüntüleri depolamak için en iyi yolu FILESTREAM

http://msdn.microsoft.com/en-us/library/cc949109.aspx

kullanıyor ancak resimler daha küçük olduğunda bu ineficient olduğunu okudum.

Filestream'i kullanarak görüntüleri ve küçük resimleri saklamak iyi bir fikir midir? Daha iyi bir alternatif var mı?

cevap

9

Microsoft Research tarafından, bu konuyu derinlemesine ele alan To Blob or Not To Blob adlı çok iyi bir makale var.

performans test ve analiz çok sayıda sonra Onların sonuç şudur: resimlerinizi veya belge VARBINARY sütun daha verimli bir veritabanında saklayarak, tipik boyutu 256K altında ise

  • Resimleriniz veya belgeniz genellikle 1 MB'den büyükse, dosya sisteminde saklamak daha verimlidir (SQL Server 2008'in FILESTREAM özniteliğinde, hala işlem denetimi altındadır ve veritabanının bir parçasıdır)

    bu ikisinin arasında 10
  • , bir şans işi biraz

bir SQL Server tabloya resimlerinizi koymak karar verirseniz

, şiddetle ayrı tablo kullanılarak öneriyoruz kullanımınıza bağlı bulunuyor Bu fotoğrafları saklamak - çalışan fotosunu çalışma masasında saklamayın - ayrı bir masada saklayın. Böylelikle, çalışan tablonuz her zaman sorgulamalarınızın bir parçası olarak çalışan fotosını seçmeniz gerekmediği için yalın, ortalama ve çok verimli kalabilir.

Dosya grupları için, bir intro için Files and Filegroup Architecture'a bakın. Temel olarak, veritabanınızı başlangıçtan itibaren büyük veri yapıları için ayrı bir dosya grubuyla oluşturur veya daha sonra ek bir dosya grubu eklersiniz. Buna "LARGE_DATA" diyelim. dosya gruplarını MSDN intro

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 

kontrol dışarı ve: Eğer VARCHAR(MAX) veya VARBINARY(MAX) sütunları saklaması gerekir hangi oluşturmak için yeni bir tablo var zaman

Şimdi

, Büyük veri için bu dosya grubunu belirtebilirsiniz onunla oyna!

+0

Peki, gerçek şu ki, Tüm sorgularda küçük resmi VEYA fotoğrafını seçmemiz gerekiyor (sonuç aramaları için küçük resim ve resmin verilerini görüntülemek için girerken fotoğraf)). Bu durumda, iki sıra halinde ayrı ayrı mı olmalıyız? –

2

Aslında doğru cevap - buna bağlıdır. Görüntüler nispeten küçükse, bunu varbinary (max) alanda tutabilirsiniz.

Neden FILESTREAM? - FILESTREAM performansı, en iyi BLOB değerlerine ulaşır - 1Mb +

İlgili konular