Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mise à jour des tables de base de données dénormalisées

Il existe plusieurs façons de gérer cette situation :

  1. Vous pouvez utiliser un déclencheur de base de données. Ce n'est pas une option indépendante de la base de données et le support RoR de celle-ci est inexistant pour autant que je sache. Si votre situation ne nécessite absolument aucune incohérence des données, ce serait probablement le moyen le plus performant d'atteindre votre objectif, mais je ne le suis pas un expert de la base de données.
  2. Vous pouvez utiliser une opération par lots pour synchroniser périodiquement les deux tables. Cette méthode permet à vos deux tables de s'écarter, puis de resynchroniser les données de temps en temps. Si votre situation permet à cette dérive de se produire, cela peut être une bonne option car cela permet à la base de données d'être mise à jour pendant les heures creuses. Si vous devez effectuer la synchronisation toutes les 5 minutes, vous voudrez probablement examiner d'autres options. Cela peut être géré par votre code ruby, mais nécessitera un exécuteur de tâche en arrière-plan quelconque (cron, delay_job, redis, etc.)
  3. Vous pouvez utiliser un rappel depuis l'intérieur de votre modèle Rails. Vous pouvez utiliser "after_update :sync_denormalized_data" . Ce rappel sera enveloppé dans une transaction au niveau de la base de données (en supposant que votre base de données prend en charge les transactions). Vous aurez un code de niveau Rails, des données cohérentes et aucun processus d'arrière-plan nécessaire au détriment de deux écritures à chaque fois.
  4. Un mécanisme auquel je n'ai pas pensé...

Ces types de problèmes sont très spécifique à l'application. Même au sein d'une même application, vous pouvez utiliser plusieurs méthodes en fonction des exigences de flexibilité et de performances requises.