sql >> Database teknologi >  >> RDS >> Mysql

Opdatering af denormaliserede databasetabeller

Der er et par måder at håndtere denne situation på:

  1. Du kan bruge en databaseudløser. Dette er ikke en databaseagnostisk mulighed, og RoR-understøttelsen af ​​den er ikke-eksisterende, så vidt jeg ved. Hvis din situation absolut ikke kræver data-inkonsistens Dette ville sandsynligvis være den mest effektive måde at nå dit mål på, men jeg er ikke en DB-ekspert.
  2. Du kan bruge en batch-handling til at synkronisere de to tabeller med jævne mellemrum. Denne metode gør det muligt for dine to tabeller at glide fra hinanden og synkroniserer derefter dataene med jævne mellemrum. Hvis din situation tillader denne drift at forekomme, kan dette være en god mulighed, da det tillader DB'en at blive opdateret uden for timer. Hvis du har brug for at udføre synkroniseringen hvert 5. minut, vil du sikkert gerne undersøge andre muligheder. Dette kan håndteres af din ruby-kode, men vil kræve en baggrundsjob-runner af en slags (cron, delayed_job, redis osv.)
  3. Du kan bruge et tilbagekald fra din Rails-model. Du kan bruge "after_update :sync_denormalized_data" . Dette tilbagekald vil blive pakket ind i en transaktion på databaseniveau (forudsat at din database understøtter transaktioner). Du vil have Rails-niveaukode, konsistente data og intet behov for en baggrundsproces på bekostning af at skrive to gange hver gang.
  4. En eller anden mekanisme, jeg ikke har tænkt på...

Disse typer problemer er meget applikationsspecifik. Selv inden for samme applikation kan du bruge mere end én af metoderne afhængigt af de involverede fleksibilitets- og ydeevnekrav.



  1. Udjævning af krydsende tidsrum

  2. Driftsrapporter for MySQL, MariaDB, PostgreSQL &MongoDB

  3. Hvordan man håndterer en ældre database i Django-rammeværket

  4. mySql kopierer rækker til samme tabel med ændret nøgleværdi (overskriver ikke eksisterende)