Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Aktualisieren denormalisierter Datenbanktabellen

Es gibt mehrere Möglichkeiten, mit dieser Situation umzugehen:

  1. Sie können einen Datenbank-Trigger verwenden. Dies ist keine datenbankunabhängige Option und die RoR-Unterstützung dafür ist meines Wissens nicht vorhanden. Wenn Ihre Situation absolut keine Dateninkonsistenz erfordert, wäre dies wahrscheinlich der effizienteste Weg, um Ihr Ziel zu erreichen, aber ich bin nicht ein DB-Experte.
  2. Sie können einen Batch-Vorgang verwenden, um die beiden Tabellen regelmäßig zu synchronisieren. Diese Methode lässt zu, dass Ihre beiden Tabellen auseinanderdriften, und synchronisiert dann die Daten von Zeit zu Zeit neu. Wenn Ihre Situation diese Abweichung zulässt, kann dies eine gute Option sein, da die DB außerhalb der Geschäftszeiten aktualisiert werden kann. Wenn Sie die Synchronisierung alle 5 Minuten durchführen müssen, sollten Sie sich wahrscheinlich andere Optionen ansehen. Dies kann von Ihrem Ruby-Code gehandhabt werden, erfordert jedoch eine Art Hintergrund-Job-Runner (cron, delayed_job, redis usw.)
  3. Sie können einen Callback innerhalb Ihres Rails-Modells verwenden. Sie können "after_update :sync_denormalized_data" verwenden . Dieser Rückruf wird in eine Transaktion auf Datenbankebene eingeschlossen (vorausgesetzt, Ihre Datenbank unterstützt Transaktionen). Sie haben Code auf Rails-Niveau, konsistente Daten und brauchen keinen Hintergrundprozess, der jedes Mal zwei Schreibvorgänge erfordert.
  4. Irgendein Mechanismus, an den ich nicht gedacht habe...

Diese Arten von Problemen sind sehr anwendungsspezifisch. Selbst innerhalb derselben Anwendung können Sie mehr als eine der Methoden verwenden, je nach Flexibilität und Leistungsanforderungen.