Sebagai aturan praktis, jangan simpan file di database.
Apa yang dikatakan manual mysql tentang hal itu? http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-optimization-tips.html
Dengan server Web, simpan gambar dan aset biner lainnya sebagai file, dengan nama jalur yang disimpan dalam database daripada file itu sendiri. Sebagian besar server Web lebih baik dalam menyimpan file daripada konten database, membuat file biasanya lebih cepat. (Meskipun Anda harus menangani sendiri masalah pencadangan dan penyimpanan dalam kasus ini.)
Jangan simpan file yang dikodekan base4 dalam database sama sekali
Bekerja dengan baik, tetapi mengambil begitu banyak waktu yang saya harapkan. Oleh karena itu, gambar berukuran 33% lebih besar, dan benar-benar terlihat menonjol.
Seperti yang Anda temukan, overhead yang tidak diinginkan dalam encoding/decoing + ruang ekstra digunakan yang berarti transfer data ekstra bolak-balik juga.
Seperti yang telah disebutkan @mike-m. Encoding Base64 bukan metode kompresi. Mengapa menggunakan pengkodean Base64 juga dijawab oleh tautan yang diposting oleh @mike-m Untuk apa pengkodean basis 64 digunakan?.
Singkatnya, tidak ada keuntungan dan banyak kerugian dari pengkodean gambar base64 sebelum menyimpannya di sistem file baik itu S3 atau lainnya.
Bagaimana dengan Gzip atau bentuk kompresi lainnya tanpa melibatkan base64. Sekali lagi jawabannya adalah bahwa tidak ada untung dan rugi banyak. Misalnya saya baru saja melakukan gzip pada gambar JPEG 1941980 dan menyimpan 4000 byte yang berarti penghematan 0,2%.
Pasalnya, gambar sudah dalam format terkompresi. Mereka tidak dapat dikompresi lebih jauh.
Saat Anda menyimpan gambar tanpa kompresi, gambar dapat dikirim langsung ke browser dan klien lain dan dapat di-cache. Jika dikompresi (atau dienkode base64), file tersebut perlu didekompresi oleh aplikasi Anda.
Peramban modern dapat menampilkan gambar base64 yang disematkan ke HTML tetapi kemudian gambar tersebut tidak dapat di-cache dan datanya sekitar 30% lebih besar dari yang seharusnya.
Apakah ini pengecualian dari norma?
Pengguna dapat memposting data dan gambar di sana dan semuanya aman.
Saya kira maksud Anda pengguna dapat mengunduh gambar miliknya atau dibagikan dengannya. Ini dapat dengan mudah dicapai dengan menyimpan file dari ruang web dalam sistem file dan hanya menyimpan jalur dalam database. Kemudian file dikirim ke klien (setelah melakukan pemeriksaan yang diperlukan) dengan fpassthru
Bagaimana jika saya berkembang menjadi 100.000 pengguna
Bagaimana mereka mengurus file gambar. Dalam masalah kinerja, ketika pengguna besar terlibat, menurut saya, saya membutuhkan 100000 folder untuk 100000 pengguna dan sub foldernya. Ketika sejumlah besar pengguna menelusuri rootfolder yang sama, bagaimana sistem file memproses setiap folder unik.
Gunakan CDN atau gunakan sistem file yang khusus cocok untuk ini seperti BTRFS
Basis data memiliki fasilitas pencarian yang baik, koneksi aman yang baik, manajemen sesi yang baik. Apakah skenario ini berubah ketika operasi besar terlibat
Ya memang. Gunakan sepenuhnya dengan menyimpan semua informasi tentang file dan jalur filenya di database. Kemudian simpan file itu sendiri di sistem file. Anda mendapatkan yang terbaik dari kedua dunia.