Görüntüleri veritabanında veya veritabanı bağlantısı olan dosyalarda depolamak mı istiyorsunuz?


22

Görüntü dosyalarını veritabanında depolamak uygun mu? Veya dosyanın kendisini sunucuda tutarken, yalnızca dosyanın yolunu veritabanında depolamak daha iyi olur mu?

Bunu yapmak için başka yöntemler var mı?

Yanıtlar:


22

Görüntüleri veritabanında değil, dosya sisteminde saklamanızı şiddetle tavsiye ederim.

Görüntüleri veritabanında saklamanın birkaç dezavantajı vardır:

  • Veritabanı beklenmedik şekilde genişleyebilir. Bazen alan bir konudur. Örneğin, SQLServer express ile 4GB limitiniz var.

  • Veri geçişleri, örneğin SQLServer’dan Oracle’a geçiş yaparsanız, acı olabilir

  • Sorgular çok yavaşlayabilir ve yüksek bir veritabanı yüküne sahip olacaksınız

  • Görüntüler dosya sistemindeyse ve diğer uygulamalar farklı bir veritabanı kullanıyorsa, diğer uygulamalarla birlikte çalışabilirlik daha iyidir. Ayrıca onlara doğrudan erişebilir ve veritabanı araçlarına ihtiyacınız yoktur.

  • Genel olarak daha kötü performans

  • Görüntüleri yine de veritabanından alırken büyük olasılıkla geçici dosyalar oluşturmanız gerekecektir. Bu gereksiz.

Bu dezavantajlar, veritabanında depolanan görüntülerin yolunu dosya sistemiyle senkronize tutmanın maliyetinden daha ağır basmaktadır. Görüntüleri veritabanında saklamanın daha iyi olduğu sadece birkaç özel durum var.


11

CRUD performansını karşılaştırmak için SQL Server 2005 ve NTFS dosya sistemi (Microsoft) araştırması: BLOB'a veya BLOB'a değil . Bu çalışma aynı zamanda bir web uygulamasında yapıldı. Başka bir veritabanını (MySQL) listeledik ve PHP siteniz için Windows Server kullanmadığınızı varsayacağım, bu nedenle birisinin farklı teknolojiler üzerinde benzer bir çalışma yapması ilginç olurdu.

Dosyaların boyutuna bağlı olduğunu ortaya koyar. SQL Server (2 kat daha iyi) 256 K veya daha az blob'u tercih eder ve dosya sistemi 1 MB + 'lık dosyaları tercih eder. Bu çalışmadaki dosya sistemleri, veritabanından daha iyi parçalanmayı ele alır, bu nedenle bu dosyaları sürekli güncelliyorsanız ya da bu sistem zamanla büyüyorsa, parçalanma, dosya sisteminin daha iyi bir iş çıkarmasını sağlayacak daha büyük bir faktör olacaktır.

Sitenizin bu dosyaları korumaktan ne kadar sorumlu olduğunu belirlemeniz gerekir. Bir sigorta şirketinin kaza fotoğraflarını yükleyeceği acenteleri için bir site satın alıyorsanız, işlem kontrolünün daha iyi olması ve bu dosyaların sunucuda olduğundan emin olmanız gerekir. İyi veritabanları bunu sizin için yapar, böylece geliştirici olarak, baskı uyguladınız.

Tasarım sırasında çoğaltma, yedekleme, olağanüstü durum kurtarma, parçalanma, kalan disk kapasitesi ve zaman içindeki performans dikkate alınmalıdır. Bu, SQL Server'ın önceki sürümünde yapılan sadece bir çalışma ve diğer veritabanı üreticileri gibi, büyük dosyaların ve ikili dosyaların ele alınmasının büyük bir rekabet alanı olduğunu tahmin ediyorum.


Entegre çözümleri de düşünebilirsiniz. Örneğin, SQL Server'da FILESTREAM ve Remote Blob Store var .
Fernando Correia

4

Çok sayıda resme sahip olacaksanız, bunları bir veritabanında saklamak, dosya sistemi düzeyinde inode bitmesiyle ilgili sorunları ortadan kaldırabilir.

Bununla birlikte, bu problem daha iyi bir dosya sistemi kullanılarak çözülebilir ve bu dosya sistemi için hangi önlemlerin alınacağı konusunda organizasyona tavsiye edilir.

Aksi takdirde, görüntüleri bir veritabanında saklamak, tamamen bir kaynak israfıdır. Dediğiniz gibi yolu saklayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.