it-swarm.asia

Apakah lebih baik menyimpan gambar dalam BLOB atau hanya URL?

Kemungkinan Duplikat:
File - dalam database atau tidak?

Saya bertanya-tanya apakah ada alasan bagus untuk tetap menggunakan bidang gumpalan dalam database. Beberapa tahun yang lalu saya bekerja dengan DB dengan banyak gambar di dalamnya, DB sangat lambat dan saya tidak bisa melihat alasan yang baik untuk menyimpan gambar di dalam DB, jadi saya mengeluarkan gambar dan menyimpan nama file. sebagai gantinya.

Apakah ini langkah yang cerdas? Apa yang akan Anda lakukan di tempat saya?

38
eiefai

Seperti yang Anda tahu dari jawaban lain, ini adalah "Tergantung". Beberapa faktor lain mungkin jika Anda membayar untuk hosting, apakah mereka mengenakan biaya lebih untuk penyimpanan file atau penyimpanan database. Penyimpanan file biasanya lebih murah, terutama untuk layanan cloud.

Jika Anda di-hosting sendiri dan menggunakan SQL Server, versi yang akan datang, nama kode Denali, akan memperpanjang FILESTREAM untuk memungkinkan akses melalui TSQL dan sistem file. Ini juga akan memastikan ini tetap sinkron. Anda dapat mengakses, memperbarui, menghapus dari kedua sisi dan itu akan membuat semuanya teratur.

Lakukan riset dan temukan apa yang penting bagi Anda dan pilih arahan berdasarkan pilihan itu.

Alasan menggunakan BLOB cukup mudah dikelola - Anda memiliki tepat satu metode untuk membuat cadangan dan memulihkan basis data, Anda dapat dengan mudah melakukan backup tambahan, tidak ada risiko gambar dan meta data yang disimpan dalam tabel DB yang pernah keluar dari sinkronisasi , Anda juga memiliki satu antarmuka pemrograman untuk menjalankan kueri atau memuat/menyimpan gambar, jadi Anda tidak perlu memberikan akses sistem file klien jarak jauh dan Anda tahu GRANT yang sama akan berlaku untuk gambar dan data terkait. Selain itu, Anda memiliki satu metode manajemen penyimpanan (mis. Di Oracle Anda mungkin meletakkan semuanya di ASM dan menggunakan Oracle sebagai LVM Anda untuk semuanya).

Aplikasi lain adalah mencampur data relasional dengan objek serial (suatu BLOB dapat berupa biner apa pun, tidak perlu berupa gambar). Atau Anda dapat menjalankan kueri terhadap data relasi dan byte x-y di BLOB, yang mungkin berupa header file. Aplikasi sebenarnya tidak ada habisnya.

Jika mengakses BLOB lebih lambat daripada mengakses filesystem Anda, kemungkinan besar database Anda salah terkonfigurasi.

17
Gaius

Saya tidak menggunakan gumpalan - kebanyakan dari cadangan dan mengembalikan perspektif, karena saya tidak ingin data gumpalan memperlambat cadangan saya.

Saya tidak menyimpan URL lengkap, namun ... Saya hanya menyimpan filepath di bawah titik tertentu, dan membangun jalur karena saya memiliki lebih dari satu cara di mana orang & program mengakses file saya (FTP, HTTP, direktori lokal, Direktori yang dipasang NFS).

... tentu saja, saya cenderung menangani lebih banyak gambar & lebih besar daripada kebanyakan orang ... salah satu dataset saya mendapat sekitar 700GB gambar (terkompresi) per hari. Tetapi bahkan thumbnail untuk gambar-gambar itu, saya masih menyimpan secara eksternal.

13
Joe

Saya penggemar berat menyimpan salinan "referensi" dari gambar dalam database - dari sudut pandang manajemen/pemulihan bencana, ini adalah cara terbaik untuk terbang.

Sekarang, Anda masih dapat melakukan banyak hal untuk menyajikan gambar dari sistem file untuk sebagian besar aplikasi sehingga Anda tidak terlalu menekan server database untuk melakukan hal-hal yang sebenarnya tidak ingin dilakukan.

8
Wyatt Barnett

Jika Anda bekerja dengan linux, menyimpan gambar dalam sistem file dan tidak dalam database memiliki kinerja yang lebih baik secara signifikan, lihat kutipan ini buku Brad Ediger Advanced Rails .

8
j.p.

Saya tidak terlalu suka menyimpan gambar di database. Dalam aplikasi kecil dengan beberapa pengguna, sepertinya ini adalah solusi yang mudah, tetapi ketika Anda mulai mengukur, itu membuat segalanya menjadi lebih sulit.

Preferensi saya adalah mulai menyimpan gambar dalam folder di server web, tetapi menyimpan path dalam konfigurasi yang mudah diakses sehingga ketika saya perlu, saya dapat dengan cepat memindahkannya ke server gambar khusus yang dioptimalkan. Kemudian, saya mungkin ingin memindahkan mereka ke tempat lain (pikirkan S3 atau Akamai) dengan cara yang sama. Semua itu jauh lebih rumit jika saya harus mengganti kode yang diharapkan untuk membacanya dari database.

5
phred

Apakah ini langkah yang cerdas?

Jika itu langkah cerdas atau tidak, itu tergantung pada kasus spesifik Anda:

Jika lokasi file secara langsung mempengaruhi struktur url atau jika Anda menyimpan alamat file lengkap dalam database (buruk), saya dapat mengatakan itu adalah langkah yang buruk karena Anda akan mengalami masalah jika seseorang memindahkan atau mengganti nama beberapa direktori.

Tetapi jika Tetapi jika aplikasi Anda dibangun dengan cara Anda hanya perlu menunjuk direktori file dan logika akses file dinamis, Anda membuat langkah cerdas karena alasan berikut:

  • Dengan penyimpanan basis data, Jika perlu melayani banyak gambar per permintaan, Anda akan menambah waktu respons aplikasi Anda karena file akan dikirim secara sinkron ke jaringan. Anda juga akan menambahkan sedikit lebih banyak pemrosesan ke server Anda.

  • Penyimpanan file biasanya lebih murah daripada penyimpanan basis data.

  • Dengan penyimpanan file (kecuali ada batasan untuk akses gambar: hanya pengguna yang ditentukan yang dapat mengakses grup gambar tertentu), tidak perlu pemrosesan apa pun untuk mengakses gambar atau jenis file lainnya.

  • Dengan penyimpanan basis data, Anda tidak dapat mengakses file menggunakan FTP (cukup jelas, tetapi perlu diingat).

  • Penyimpanan file database akan memperlambat dan/atau mengacaukan backup berkala database Anda.

Apa yang akan Anda lakukan di tempat saya?

Saya akan mengambil keputusan itu kecuali faktor dominan yang berlawanan muncul.

Semoga itu bisa membantu.

4
marcio