Saya perlu menyimpan file data biner dalam database PostgreSQL yang berjalan di server Ubuntu. Awalnya akan ada beberapa lusin file dengan ukuran masing-masing sekitar 250kb. Namun, jumlah file akan meningkat seiring waktu. Kadang-kadang saya perlu mengekstrak data dari file untuk analisis hilir lainnya.
Saya telah melakukan beberapa penelitian tentang pertanyaan lama menyimpan data biner sebagai BLOB atau referensi. Keduanya jelas memiliki pro dan kontra. Apakah ada masalah khusus yang berkaitan dengan PostgreSQL yang harus saya ketahui? Apakah satu metode atau yang lain lebih disukai jika saya ingin mengekstrak data dari file, baik melalui fungsi PostgreSQL atau melalui program Python eksternal?
Jika saya menyimpan file data secara langsung dalam database, apakah lebih baik menyimpannya dalam tabel terpisah dengan kunci asing yang merujuk pada tabel "utama", daripada di tabel yang berisi semua bidang lainnya?
Saya telah membaca pertanyaan dan jawaban di sini ; komentar di sana menunjukkan bahwa menyimpan file biner dengan referensi (dalam sistem file) di Linux lebih baik. Pertanyaan saya di sini berkaitan dengan PostgreSQL secara khusus dan untuk mengekstraksi data dari file untuk berbagai analisis.
Perbarui: Pertanyaan serupa .
sumber
Jawaban:
Saya pikir Anda harus menyimpan data dalam database sebagai
bytea
kolom normal . Dengan cara itu Anda mendapatkan semua keuntungan dari database, dan Anda dapat memproses data menggunakan fungsi basis data (dan bahkan PL / Python, jika Anda menginginkannya). Item data yang lebih besar akan secara otomatis disimpan di luar jalur, sehingga tidak ada alasan bagi Anda untuk memperkenalkan tipuan referensi lain.Alasan utama untuk menyimpan objek biner besar di luar database adalah jika mereka terlalu besar untuk dapat menyimpan dan mengambilnya dalam waktu yang memuaskan, jika mereka menggembungkan database di luar kepraktisan, atau jika Anda perlu mengakses file sebagai file dari aplikasi terpisah. Tidak ada yang berlaku di sana, sejauh yang saya tahu.
sumber