2010-10-21 15 views

risposta

0

Da Wikipedia:

"dati bitemporale è un concetto utilizzato in un database temporale Si denota sia il tempo valido e il tempo di transazione dei dati In una tabella di database di dati bitemporale è spesso rappresentato da quattro tavolo extra.. -columns StartVT e EndVT, StartTT e EndTT. Ogni intervallo di tempo viene chiuso al limite inferiore e aperto al limite superiore. "

Quindi non puoi semplicemente inserire questi quattro valori nei tuoi dati?

+1

L'aggiunta di questi metadati è solo una soluzione parziale. È necessaria la gestione automatica di questi metadati. Considerare un aggiornamento di un oggetto logico solo per un dato tempo valido (anno 2015). Quindi un database bitemporale garantirebbe che prima del 2015 e dopo il 2015 i valori originali rimanessero intatti. Inoltre permetterebbe di interrogare con un contesto bitemporale: quali erano le mie conoscenze nel 2013 sullo stato dell'oggetto con ID logico 777 nell'anno 2015? – user152468

2

Non conosco alcun datastore NoSQL specificamente progettato per gestire i dati temporali. Al fine di mettere i periodi di tempo validi e delle transazioni su dati in Riak si avrebbe bisogno di uno:

  1. Avvolgete i vostri documenti/valori con una struttura che può contenere i metadati come:

    { meta: { valido: ["2001-11-08", "2001-11-09"], transazione: ["2011-01-29 10:27:00", "2011-01-29 10:28:00 "] } payload:" Questo è il vero documento/valore che voglio memorizzare! " }

  2. Creare un "meta-documento" per ogni documento e utilizzare Riak Links per collegarli.
    Penso che questo sia un po 'più pulito, ma se è necessario recuperare questi tempi spesso, questo metodo potrebbe essere troppo lento.

Se si desidera recuperare i documenti di tempo, allora non credo che Riak (o altri archivi dati chiave/valore che io sappia) sarà il datastore diritto di utilizzare. SQL o forse qualche sistema BigTable potrebbe essere la tua unica buona opzione.

1

ho scritto un piccolo bitemporale, aperto livello di database source basata su MongoDB:

https://github.com/1123/bitemporaldb

Quando si conserva Scala o oggetti Java, l'oggetto viene avvolto in un oggetto bitemporale generico con le meta-informazioni bitemporale (tempo valido, tempo di transazione). Successivamente viene serializzato su json e memorizzato come BSON in MongoDB.

Gestisce gli aggiornamenti temporali e non temporali agli oggetti in modo trasparente. La ricerca per contesto bitemporale è possibile.

I database orientati ai documenti per i dati bitemporali sono utili, poiché l'archiviazione orientata ai documenti riduce il numero di join per il recupero dei dati. Le unioni in un contesto bitemporale possono essere inefficienti e difficili da codificare a mano.

Feedback, contributi e richieste di funzionalità sono i benvenuti.

0

Per supportare un modello bitemporale (o modello temporale db), è necessario disporre di transazioni acide per eseguire il DML corretto per aggiornare e inserire record su due dimensioni temporali (tempo valido/effettivo e tempo di transazione/sistema). See for details sulla modellazione temporale.

Il popolare database NoSQL come Cassandra, MongoDB, Couchbase, ad esempio, non ha il supporto ACID per eseguire le necessarie operazioni di aggiornamento/inserimento record necessarie per supportare la manipolazione bitemporale dei record. Con i database temporali e bitemporali i record non devono mai sovrapporsi e i record devono essere correttamente terminati quando sostituiti da record di tempo valido/transazione validi.

MarkLogic Il database NoSQL sostiene il supporto per bitemporal, ma non lo ha mai provato e non è open source. Tuttavia, è possibile eseguire il rollover della propria soluzione utilizzando il database ACID che funziona effettivamente come un giornale di tracciamento del tempo valido/della transazione e quindi utilizzare NoSQL per l'archivio dati effettivo. Vedi la descrizione di alto livello di questo approach here.

Problemi correlati