Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Penyimpanan Biner MySQL menggunakan Sistem File BLOB VS OS:file besar, jumlah besar, masalah besar

Saya bekerja pada sistem perangkat lunak besar yang telah melakukan kedua mekanisme untuk menyimpan lampiran dan konten lainnya. Iterasi pertama dari sistem menyimpan semua data dalam BLOB di DB. Aku mengutuknya saat itu. Sebagai seorang programmer, saya dapat menulis skrip samping untuk segera mengoperasikan data dan mengubahnya kapan pun saya mau.

Maju sekitar 10 tahun dan saya masih mengelola perangkat lunak yang sama tetapi arsitekturnya telah berubah dan itu ditulis dengan pointer sistem file. Saya mengutuknya sekarang dan berharap itu kembali ke DB. Saya memiliki manfaat tambahan selama beberapa tahun dan setelah mengerjakan aplikasi ini dalam kapasitas yang jauh lebih besar dalam lebih banyak situasi yang lebih besar, saya merasa pendapat saya sekarang lebih terdidik. Promosi atau migrasi sistem aplikasi memerlukan skrip ekstensif dan penyalinan jutaan file. Pada satu kesempatan kami mengubah OS dan semua penunjuk file memiliki pemisah direktori yang salah, atau nama server berubah di mana file itu berada dan kami harus menulis dan menjadwalkan pernyataan pembaruan SQL sederhana dengan DBA pada akhir pekan untuk diperbaiki. Lain adalah bahwa sistem file dan catatan DB tidak sinkron, mengapa tidak pasti tetapi setelah ribuan hari beroperasi, kadang-kadang sistem non-transaksional (sistem file dan DB tidak berbagi konteks transaksional) menjadi tidak sinkron. Terkadang file hilang secara misterius.

Ketika semua ini ada di DB, migrasi atau promosi lingkungan adalah masalah dump dan impor DB. Perubahan baris dapat diaudit dengan benar, semua yang sinkron dan log dapat diputar ulang ke titik waktu jika perlu. Tentu DB menjadi besar, tetapi ini tahun 2011 dan hal ini bukanlah tantangan bagi database.

Untuk apa nilainya, kami memiliki beberapa masalah serupa dengan buffer data besar saat mengalirkan beberapa data, tetapi A) kami dapat memompa data dalam buffer byte dengan Input|OutputStreams di JDBC dan B) saat menggunakan alat lain, kami menulis prosedur tersimpan yang akan memotong BLOB ke dalam tabel temp dan secara iteratif menyajikan potongan dari tabel temp. Bekerja dengan baik.

Saya tidak peduli apa alasan teknis untuk tidak meletakkan barang-barang ini di DB, tetapi jauh lebih mudah untuk mengelola di lokasi yang terkonsolidasi, saya dapat menggandakan dan melipattigakan perangkat keras atau membuat grid DB untuk waktu yang terbuang oleh konsultan dan pelanggan hanya dalam waktu singkat mengelola file yang berbeda.

Pembaruan:santai saja pada komentator, mereka hanya memberikan pendapat mereka tentang masalah ini.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesulitan memutuskan untuk mengidentifikasi atau tidak mengidentifikasi hubungan

  2. Mysql - hapus dari beberapa tabel dengan satu kueri

  3. PHP mengubah mysql_query lama menjadi PDO

  4. Keluaran UTF-8 dengan CakePHP

  5. Bagaimana menghubungkan ke database menggunakan klien MySQL Navicat