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

Memperbarui tabel database yang didenormalisasi

Ada beberapa cara untuk menangani situasi ini:

  1. Anda dapat menggunakan pemicu basis data. Ini bukan opsi agnostik basis data dan dukungan RoR untuk itu tidak ada sejauh yang saya tahu. Jika situasi Anda sama sekali tidak memerlukan inkonsistensi data Ini mungkin cara yang paling efektif untuk mencapai tujuan Anda, tetapi saya tidak seorang ahli DB.
  2. Anda dapat menggunakan operasi batch untuk menyinkronkan dua tabel secara berkala. Metode ini memungkinkan dua tabel Anda terpisah dan kemudian menyinkronkan ulang data sesering mungkin. Jika situasi Anda memungkinkan penyimpangan ini terjadi, ini bisa menjadi pilihan yang baik karena memungkinkan DB diperbarui selama jam istirahat. Jika Anda perlu melakukan sinkronisasi setiap 5 menit, Anda mungkin ingin melihat opsi lain. Ini dapat ditangani oleh kode ruby ​​​​Anda, tetapi akan memerlukan semacam pelari pekerjaan latar belakang (cron, tertunda_job, redis, dll.)
  3. Anda dapat menggunakan panggilan balik dari dalam model Rails Anda. Anda dapat menggunakan "after_update :sync_denormalized_data" . Panggilan balik ini akan dibungkus dalam transaksi tingkat basis data (dengan asumsi basis data Anda mendukung transaksi). Anda akan memiliki kode level Rails, data yang konsisten, dan tidak perlu proses latar belakang dengan mengorbankan membuat dua penulisan setiap kali.
  4. Beberapa mekanisme yang belum terpikirkan....

Jenis masalah ini sangat spesifik aplikasi. Bahkan dalam aplikasi yang sama Anda dapat menggunakan lebih dari satu metode tergantung pada fleksibilitas dan persyaratan kinerja yang terlibat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Permintaan SQL LIKE gagal - kesalahan fatal dalam pernyataan yang disiapkan

  2. Perbarui versi MySQL dari 5.1 ke 5.5 di CentOS 6.2

  3. Kunci Asing MySQL

  4. MySQL Sebelum Hapus pemicu untuk menghindari menghapus banyak baris

  5. apache mysql - paket rusak pada 3306