Det finns några sätt att hantera den här situationen:
- Du kan använda en databasutlösare. Detta är inte ett databasagnostiskt alternativ och RoR-stödet för det är obefintligt så vitt jag vet. Om din situation absolut inte kräver någon datainkonsekvens Detta skulle förmodligen vara det mest effektiva sättet att uppnå ditt mål, men jag är inte en DB-expert.
- Du kan använda en batch-operation för att synkronisera de två tabellerna med jämna mellanrum. Den här metoden låter dina två tabeller glida isär och synkroniserar sedan om data då och då. Om din situation tillåter denna drift att inträffa, kan detta vara ett bra alternativ eftersom det tillåter DB att uppdateras under lediga timmar. Om du behöver göra synkroniseringen var 5:e minut kommer du förmodligen att vilja undersöka andra alternativ. Detta kan hanteras av din ruby-kod, men kommer att kräva en bakgrundsjobblöpare av något slag (cron, delayed_job, redis, etc.)
- Du kan använda en återuppringning från din Rails-modell. Du kan använda
"after_update :sync_denormalized_data"
. Denna återuppringning kommer att lindas in i en transaktion på databasnivå (förutsatt att din databas stöder transaktioner). Du kommer att ha Rails-nivåkod, konsekventa data och inget behov av en bakgrundsprocess på bekostnad av att göra två skrivningar varje gång. - Någon mekanism jag inte har tänkt på...
Den här typen av problem är mycket applikationsspecifik. Även inom samma applikation kan du använda mer än en av metoderna beroende på vilken flexibilitet och prestanda som krävs.