2009-07-31 11 views
7

Son zamanlarda, ben ve meslektaşlarım, milyarlarca insanı hızlıca arayabilecek ve indirebilecek bir resim saklayabilecek devasa bir depolama sisteminin nasıl inşa edileceğini tartışıyoruz.Milyarlarca görüntüyü Veritabanına kaydetmenin iyi bir fikir olduğunu mu düşünüyorsunuz?

Bir fickr gibi bir şey, ama bir çevrimiçi galeri için değil. Yani, bu resmin çoğu asla indirilmeyecek.

Meslektaşlarım, tüm bu dosyaları doğrudan veritabanına kaydetmemizi öneriyor. Gerçekten iyi bir fikir olmadığını düşünüyorum ve bence veritabanı çok sayıda ikili dosyayı geri yüklemek için istenmiyor. Ama bunun neden iyi bir fikir olmadığını anlamak için çok güçlü bir nedenim var.

Bunun hakkında ne düşünüyorsunuz?

+11

Bu ölüm halihazırda tartışılmıştır: http://stackoverflow.com/questions/3748/storing-images-in-db-yea-or-nay http://stackoverflow.com/questions/815626/to- http://stackoverflow.com/questions/805519/save-image-in-database –

cevap

17

İkili nesnelerle uğraşırken, mimariye yönelik bir belgenin merkezci yaklaşımını izleyin ve veritabanında pdf'ler ve görüntüler gibi belgeleri depolamayın; sonuçta, veritabanınızdaki her türlü performans sorununu görmeye başladığınızda yeniden gözden geçirmeniz gerekecektir. . Dosyayı sadece dosya sisteminde saklayın ve veritabanını veritabanınızın içine yerleştirin. Ayrıca, veritabanında serileştirmek ve kaydetmek için kullanacağınız veri türünün boyutu üzerinde bir fiziksel sınırlama vardır. Sadece dosya sisteminde saklayın ve ona erişin.

+8

İlginçtir SQL Server 2008, FILESTREAM ile bunu sizin için yapar depolama seçeneği - http://msdn.microsoft.com/en-us/library/cc949109.aspx – RichardOD

+0

Buna katılıyorum olsa da, SharePoint veritabanındaki hemen hemen her şeyi depolamıyor mu? Öyleyse, SharePoint kullanıcılarının dosyaları veritabanında saklamanın kötü bir fikir olduğunu düşünmeyeceğini düşünürdüm. Bazı yönlerden (sorgulama gibi) faydalı olduğuna inanıyorum, ancak bu yöntemler muhtemelen burada bahsettiğiniz şeylere tam olarak karşı çıkmıyor. – Dusty

+0

@RichardOD, makaleyi okudum ve ağırlıklı olarak yapılandırılmış içeriğe ve yapılandırılmamış içeriğin depolanmasıyla ilgili aynı zorluklardan bahsediyor ve NTFS'yi önerir. "FILESTREAM, SQL Server 2008 sürümünde yeni bir özelliktir. Yapılandırılmış verilerin veritabanında depolanmasını ve doğrudan yapılandırılmamış (yani, BLOB) verilerin doğrudan NTFS dosya sisteminde depolanmasını sağlar. Daha sonra BLOB'a erişebilirsiniz. verileri, yüksek performanslı Win32® akış API'leri aracılığıyla, SQL Server üzerinden BLOB verilerine erişme performansının cezasını ödemek yerine, " –

0

Bu iyi bir fikir değil. Veritabanının amacı, metin verilerini almak için karmaşık sorguları hızlıca çözebilmenizdir. İkili veri bir veritabanında saklanabilirken işlemleri yavaşlatabilir. Bu, veritabanı çalışan uygulamadan ayrı bir sunucuda olduğunda özellikle doğrudur. Veritabanında meta verileri ve görüntülerin konumunu/dosya adını saklayın. Görüntüler statik sunucularda olmalıdır.

2

gerçekten görüntülerin milyarlarca bahsedecek olursak alma seri ve görüntüleri de-seralizing daha hızlı olacaktır, çünkü ben

+1

Evet, gerçekten milyarlarca görüntüden bahsediyorum. Mucizeler her gün olur. – ablmf

1

cevaplar yukarıdaki olduğunu veritabanını varsaymak görünen dosya sisteminde saklamak istiyorum bir RDBMS. Veritabanınız, beklediğiniz boyuttaki ikili belgeler için destek içeren bir belgeye yönelik veritabanı ise, bunları veritabanında depolamak kesinlikle akıllıca olabilir.

+0

Bir çift veritabanına isim verebilir misiniz? – Moonwalker

+2

MarkLogic (http://developer.marklogic.com/) XML, JSON, metin ve ikili belgeleri depolamayı destekler. Http://github.com/marklogic/Corona adresinde ve yerel bir sorgu diliyle (XQuery) hızlı bir şekilde ilerlemenizi sağlayan bir REST API'sı var. –

İlgili konular