In che modo Datomic gestisce le "correzioni"?

6

tl; dr

  • Rich Hickey descrive datomic come un sistema che tratta implicitamente i timestamp associati all'archiviazione dei dati
  • dalla mia esperienza, i dati sono spesso memorizzati in modo imperfetto nei sistemi e in molte occasioni devono essere corretti in modo retroattivo (ad esempio, spesso la domanda "era un vero martedì alle 12:00 pm?" avrà una risposta errata memorizzata in il database)

Questo sembra un punto in cui le astrazioni dietro il datomico potrebbero rompersi - vero? In caso contrario, in che modo il sistema gestisce tali correzioni?

Rich Hickey, in molti dei suoi discorsi, giustifica la creazione di datomico e ne spiega i benefici.

Il suo lavoro, se ho capito bene, è motivato dal nucleo dell'intuizione che gli esseri umani, parlando di dati e fatti, associano implicitamente parte del contesto correlato al loro lavoro (un tempo di una data). Spingendo il lavoro richiesto per gestire la componente implicita data-time del contesto nel database, ha creato un sistema che è molto più facile da capire e molto più facile da programmare. Questo risulta essere rilevante per la maggior parte dei programmatori di database in pratica - il suo lavoro consente a tutti di risparmiare molto tempo nella gestione di query complesse, difficili da produrre / debug / fix, time.

Tuttavia, specialmente nei database di grandi dimensioni, i dati sono spesso danneggiati / errati (forse non è stato inserito correttamente, forse è stato eroso nel tempo, ecc ...). Mentre la maggior parte degli aggiornamenti del database sono inserimenti di nuovi fatti, e dovrebbero essere trattati in questo modo, un sottoinsieme non banale del lavoro richiesto per gestire le interrogazioni temporali ha a che fare con aggiornamenti retroattivi.

Non ho ancora visto alcuna documentazione che spieghi come tali correzioni o aggiornamenti retroattivi siano gestiti da datomic; dalla mia esperienza, sono un sottoinsieme non banale (e incredibilmente difficile da gestire) di manipolazione dei dati relativa al tempo che i programmatori di database devono affrontare.

Datomic gestisce con grazia tali aggiornamenti? Se sì, come?

    
posta blueberryfields 03.10.2013 - 01:07
fonte

2 risposte

5

La domanda a cui verrà data la data e l'ora incorporata è ciò che ho creduto martedì alle 12, non ora cosa ritengo possa essere il valore del martedì alle 12. Se hai bisogno di un timestamp per dirti quando qualcosa è vero quindi il timestamp sono dati, non metadati. Il timestamp incorporato di Datomic è metadata e deve essere trattato come tale. Se in seguito si decide che dovrebbe essere vero solo a 1 anziché a 12, quindi si scrive un aggiornamento come si farebbe per qualsiasi altro database. Datomic ricorderà sia la nuova ora sia quando l'hai aggiornata.

Trattate in modo basico il timestamp incorporato come se fosse un registro di controllo. Dovrebbe più o meno avere a che fare con la logica quotidiana della tua applicazione. Un paio di scenari in cui potrebbe essere utile è se è necessario annullare una scrittura errata o eseguire un'analisi con quanto rapidamente un valore sta cambiando.

    
risposta data 03.10.2013 - 04:24
fonte
2

Questo è per rispondere al commento di blueberryfields @ 3 ottobre 13 alle 4:28

La domanda sulla data e l'ora incorporata risponderà è cosa ho invio martedì alle 12, non cosa ritengo ora che il valore inserito sia martedì a 12.

Credo che sia così che dovresti usare Datomic. Il timestamp integrato può aiutarti a sapere quando è stato effettuato un input errato in modo da poter apportare una correzione. Non correggere ciò che hai pensato in passato.

    
risposta data 02.07.2014 - 08:33
fonte

Leggi altre domande sui tag