2010-04-27 5 views
12

Ho letto tutte le domande SO, gli articoli di Horror Coding e ho cercato su Google il mio cervello alla ricerca dei modi migliori per controllare i dati di controllo. Funzionano tutti e tutti hanno le loro implementazioni appropriate basate su casi d'uso e così via. Quello che voglio veramente sapere è perché non è stato scritto un database per supportare nativamente la revisione a livello di dati?Dove sono tutti i database revisionati nativi?

Quello che mi lascia sconcertato è che l'API è già praticamente in atto con le transazioni. Iniziamo una transazione, cambiamo alcuni dati e commit. Anche noi stiamo autenticandoci contro il database, quindi è presente la colpa. La mia azienda memorizza le versioni di fine mese dell'intero database per scopi contabili che equivalgono ai tag. Questo non urla RCS?

La ramificazione è qualcosa che i database potrebbero trarre grandi vantaggi anche dallo schema più che dai dati. Dal momento che mi interessa davvero solo dei dati e questo aumenterebbe la difficoltà di implementazione in misura massiccia, mi limiterò a limitarmi a tag e commit.

Ora so che i database sono applicazioni incredibilmente critiche in termini di tempo, quindi qualsiasi sovraccarico non necessario è evitato nel dimenticatoio e alcuni database sono di livello epico e le revisioni esponenteranno solo tali dimensioni. Un controllo di revisione opt-in per tavolo ha indubbiamente un posto in ambienti di piccole e medie dimensioni dove ci sono millisecondi da risparmiare e la cronologia dei dati ha un certo grado di importanza. Voglio i commit, voglio i log, voglio i reverts, voglio diff, voglio dare la colpa, voglio tag e voglio checkouts. Voglio il controllo di revisione di MF-ing.

Ho una domanda da qualche parte ...

risposta

3

Una soluzione nativa è Oracle di Flashback Database (aka Total Recall). Si tratta di un ulteriore carico del Enterprise Edition, ma è piuttosto fresco. Memorizza in modo trasparente le versioni dei dati per tutto il tempo che vogliamo conservarlo, e la sintassi forniture per interrogare le vecchie versioni dei dati. Può essere abilitato su base tabella per tabella.

Essenzialmente Flashback DB è come usare i trigger per memorizzare i record nelle tabelle di monitoraggio, ma slick, performante e invisibile al funzionamento normale.

0

hai dimenticato voglio prestazioni. Un DBMS è un meccanismo di memorizzazione dei dati di basso livello e, nei sistemi con miliardi di righe, le prestazioni possono essere importanti. Pertanto, se si desidera questo tipo di sistema di auditing, è possibile crearlo manualmente utilizzando gli strumenti disponibili (ad es. Trigger).

Proprio come in un file system, non tutti i file sono appropriati per il controllo di versione, in una banca dati non tutte le righe sarebbero idonei per il controllo di versione sia.

+0

Ho eseguito il trigger route che è corretto e completamente in-application logic e funzionano entrambi, ma non so perché nessuno di questi esiste. Mi piacerebbe vedere una revisione che comprende modifiche a più di una riga e anche più di una tabella, comunque. E come ho detto questo dovrebbe essere un'aggiunta di opt-in e per-table in quanto le prestazioni sono sempre importanti. Immagino che, poiché non è possibile eseguire questa operazione su una grande distribuzione, è il motivo per cui non è mai stato implementato nei DB mainstream. Tuttavia, alcuni dei miei siti web e applicazioni più piccoli e specializzati potrebbero trarne beneficio. –

3

Si può leggere su temporal databases.

In "Temporal Data & the Relational Model" di Date, Darwen e Lorentzos, gli autori introducono un sixth normal form per tenere conto dei problemi relativi al rilevamento dei dati temporali.

Richard Snodgrass propose TSQL2 come estensione di SQL per gestire i dati temporali.

implementazioni includono:

+0

Sono sorpreso di non averne mai sentito parlare, ma sembra molto promettente su ciò che ho immaginato nella mia testa da una rapida lettura dell'articolo di Wikipedia. Non sto cercando nulla di produzione pronto, solo qualcosa con cui incappare. –

+0

Wow - così TSQL2 era un bambino degli anni '90. Giorni pre-wikipedia. Penso che debba essere svegliato perché il terreno per quei semi di idee è un po 'più fertile in questi giorni. –

1

Diversi DBMS implementano meccanismi di controllo delle versioni a livello di motore. Sfortunatamente non esiste uno standard indipendente dal produttore per questo, quindi sono tutti di proprietà. Il flashback Oracle è già stato menzionato. La funzionalità Microsoft Data Change Capture in SQL Server è un'altra.