sql >> Database >  >> RDS >> Mysql

Gedenormaliseerde databasetabellen bijwerken

Er zijn een paar manieren om met deze situatie om te gaan:

  1. U kunt een databasetrigger gebruiken. Dit is geen database-agnostische optie en de RoR-ondersteuning ervan is voor zover ik weet niet aanwezig. Als uw situatie absoluut geen gegevensinconsistentie vereist Dit zou waarschijnlijk de meest efficiënte manier zijn om uw doel te bereiken, maar ik ben niet een DB-expert.
  2. U kunt een batchbewerking gebruiken om de twee tabellen periodiek te synchroniseren. Met deze methode kunnen uw twee tabellen uit elkaar drijven en worden de gegevens vervolgens om de zoveel tijd opnieuw gesynchroniseerd. Als uw situatie deze drift toelaat, kan dit een goede optie zijn, omdat de DB hierdoor buiten kantooruren kan worden bijgewerkt. Als u de synchronisatie elke 5 minuten moet uitvoeren, wilt u waarschijnlijk andere opties bekijken. Dit kan worden afgehandeld door uw ruby-code, maar er is een soort achtergrond-jobrunner nodig (cron, vertraagde_job, redis, enz.)
  3. Je kunt terugbellen vanuit je Rails-model. U kunt "after_update :sync_denormalized_data" . gebruiken . Deze callback wordt verpakt in een transactie op databaseniveau (ervan uitgaande dat uw database transacties ondersteunt). Je hebt Rails-niveaucode, consistente gegevens en geen achtergrondproces nodig dat ten koste gaat van twee keer schrijven.
  4. Een mechanisme waar ik nog niet aan heb gedacht....

Dit soort problemen zijn erg toepassing specifiek. Zelfs binnen dezelfde applicatie kunt u meer dan één van de methoden gebruiken, afhankelijk van de flexibiliteit en prestatie-eisen die ermee gemoeid zijn.



  1. NULL Complexiteiten – Deel 2

  2. Hoe meerdere nummers te beperken door meerdere kolommen op MySql te filteren?

  3. Hibernate-annotaties gebruiken om een ​​index toe te voegen aan een Lob / Clob / tinyblob

  4. Sqlalchemy bulk-update in MySQL werkt erg traag