Menyimpan gambar dalam basis data, atau dalam file dengan tautan basis data?

22

Apakah pantas menyimpan file gambar dalam basis data? Atau akan lebih baik untuk menyimpan hanya path file dalam database, sambil menyimpan file itu sendiri di server?

Apakah ada metode lain untuk melakukan ini dengan benar?

LostMohican
sumber

Jawaban:

22

Saya sangat menyarankan Anda untuk menyimpan gambar dalam sistem file dan bukan dalam database.

Menyimpan gambar dalam database memiliki beberapa kelemahan:

  • Basis data mungkin tumbuh besar secara tak terduga. Terkadang ruang menjadi masalah. Misalnya dengan SQLServer express Anda memiliki batas 4GB.

  • Migrasi data dapat menjadi masalah, misalnya jika Anda beralih dari SQLServer ke Oracle

  • Kueri bisa menjadi sangat lambat dan Anda akan memiliki beban basis data yang tinggi

  • Interoperabilitas dengan aplikasi lain lebih baik jika gambar berada di sistem file dan aplikasi lain menggunakan database yang berbeda. Anda juga dapat mengaksesnya secara langsung dan tidak memerlukan alat basis data.

  • Kinerja lebih buruk secara umum

  • Anda mungkin harus membuat file sementara saat mengambil gambar dari basis data. Itu tidak perlu.

Kerugian ini jauh lebih besar daripada biaya menjaga jalur ke gambar yang disimpan dalam database disinkronkan dengan sistem file. Hanya ada beberapa kasus khusus di mana lebih baik menyimpan gambar dalam database.

Elang
sumber
11

Penelitian tentang SQL Server 2005 dan sistem file NTFS (Microsoft) untuk membandingkan kinerja CRUD: Untuk BLOB atau bukan BLOB . Penelitian ini juga dilakukan dalam aplikasi web. Anda mendaftar database lain (MySQL) dan saya akan menganggap Anda tidak menggunakan Windows Server untuk situs PHP Anda, jadi akan menarik jika seseorang telah melakukan penelitian serupa pada teknologi yang berbeda.

Ternyata itu tergantung pada ukuran file. SQL Server mendukung (2x lebih baik) gumpalan 256K atau kurang dan sistem file lebih menyukai file 1MB +. Sistem file dalam penelitian ini menangani fragmentasi lebih baik daripada database, jadi jika Anda terus memperbarui file-file ini atau sistem ini tumbuh dari waktu ke waktu, fragmentasi akan menjadi faktor yang lebih besar dimana sistem file akan melakukan pekerjaan yang lebih baik.

Anda perlu menentukan seberapa bertanggung jawab situs Anda untuk memelihara file-file ini. Jika Anda membangun situs untuk agen klaim asuransi untuk mengunggah foto kecelakaan, Anda sebaiknya memiliki kontrol transaksi dan pastikan file-file itu ada di server. Database yang baik melakukan ini untuk Anda, sehingga sebagai pengembang, Anda telah menambahkan tekanan.

Replikasi, cadangan, pemulihan bencana, fragmentasi, kapasitas disk yang tersisa, dan kinerja dari waktu ke waktu harus dipertimbangkan selama desain. Ini hanya satu studi pada versi SQL Server sebelumnya dan seperti pabrikan database lainnya, saya menduga menangani file besar dan binari adalah arena kompetitif utama.

JeffO
sumber
Anda mungkin juga ingin mempertimbangkan solusi terintegrasi. Misalnya, pada SQL Server ada FILESTREAM dan Remote Blob Store .
Fernando Correia
4

Jika Anda akan memiliki sejumlah besar gambar, menyimpannya dalam basis data dapat menghilangkan masalah dengan kehabisan inode di tingkat sistem file.

Namun masalah ini sebaiknya diselesaikan dengan menggunakan filesystem yang lebih tepat dan tindakan apa pun yang disarankan dengan filesystem tersebut di organisasi.

Jika tidak, menyimpan gambar dalam database adalah pemborosan sumber daya. Simpan jalur seperti yang Anda katakan.

Jonno
sumber