Sto lavorando a un progetto che ruota intorno a un database di circa 750.000 entità. Diciamo solo che queste entità sono opere musicali. Ogni opera musicale è associata a un album, uno o più compositori e alcune altre entità.
L'azienda proprietaria di questo database ha acquistato servizi da altri fornitori che richiedono all'azienda di "notificare" questi fornitori quando un lavoro musicale viene creato, aggiornato o eliminato nel database.
Una nota importante qui è che ogni dato lavoro musicale è considerato aggiornato se l'entità stessa (l'opera musicale) o qualsiasi entità a cui è associata l'opera musicale viene aggiornata. In altre parole, se il compositore dell'opera musicale "Air On The String" è stato rinominato da "Bacch" a "Bach" - allora quell'opera musicale (e tutte le altre tracce relative a quel compositore) dovrebbero essere considerate aggiornate.
Le entità sono archiviate in un database relazionale e nel database non sono presenti funzionalità incorporate che consentano di tenere traccia di quali entità sono state create, aggiornate o cancellate. È anche un requisito non affidarsi a tali funzionalità. Inoltre, il grafico delle entità che costituiscono una singola opera musicale può crescere abbastanza grande. Non penso che le dichiarazioni SQL creative siano il modo per andare qui a scoprire in qualche modo entità create, aggiornate o cancellate.
Quello che ho pensato è di creare un lavoro che una volta al giorno semplicemente itera su tutte le opere musicali e crea un hash per ognuno di essi. Finora sono giunto alla conclusione che per ogni dato lavoro musicale nel database, il lavoro dovrà estrarre il lavoro musicale dal database insieme alle entità associate (album, condivisioni, compositori ecc.) E generare un hash basato su campi pertinenti.
Credocheunhashpossaesseregeneratoconcatenandocampitraccia,campicondivisi,campicompositoreecampialbumequindicreareunhashbasatosuquella(lunga)stringa.
L'hashgeneratoperognilavoromusicaleverràquindimemorizzatoinundatabaseseparatoe,inquestomodo,illavoropuòconfrontareleoperemusicali(tramiteglihashgenerati)perognicorsarispettoallacorsaprecedente.
Inquestomodo,illavorosarà"agnostico dell'archivio dati" (le entità possono provenire direttamente dal database, da un servizio web o da qualcos'altro) e lo stato effettivo dell'ultima versione replicata di un dato lavoro musicale verrà archiviato in modo sicuro come un hash.
Ora, mi piacerebbe un controllo di sanità mentale su questo progetto. Questo sembra essere un modo giusto per risolvere questo compito o sto complicando le cose?