Ci sono alcuni modi per gestire questa situazione:
- Puoi usare un trigger di database. Questa non è un'opzione indipendente dal database e il supporto RoR è inesistente per quanto ne so. Se la tua situazione non richiede assolutamente alcuna incoerenza dei dati Questo sarebbe probabilmente il modo più efficace per raggiungere il tuo obiettivo, ma io non un esperto di DB.
- Puoi utilizzare un'operazione batch per sincronizzare periodicamente le due tabelle. Questo metodo consente alle tue due tabelle di allontanarsi e quindi sincronizza nuovamente i dati ogni tanto. Se la tua situazione consente che si verifichi questa deriva, questa può essere una buona opzione in quanto consente di aggiornare il DB durante le ore di riposo. Se devi eseguire la sincronizzazione ogni 5 minuti, probabilmente vorrai esaminare altre opzioni. Questo può essere gestito dal tuo codice Ruby, ma richiederà un job runner in background di qualche tipo (cron, delay_job, redis, ecc.)
- Puoi usare un callback dall'interno del tuo modello Rails. Puoi usare
"after_update :sync_denormalized_data"
. Questo callback verrà racchiuso in una transazione a livello di database (supponendo che il database supporti le transazioni). Avrai codice a livello di Rails, dati coerenti e non avrai bisogno di un processo in background a scapito di fare due scritture ogni volta. - Alcuni meccanismi a cui non ho pensato....
Questi tipi di problemi sono molto specifico dell'applicazione. Anche all'interno della stessa applicazione è possibile utilizzare più di uno dei metodi a seconda dei requisiti di flessibilità e prestazioni coinvolti.