Domanda

Stiamo cercando di utilizzare HBase per memorizzare i dati di serie temporali. Il modello che abbiamo attualmente memorizza il tempo di serie come le versioni all'interno di una cella. Ciò implica che la cellula potrebbe finire per la memorizzazione di milioni di versioni, e le query in questo momento-serie sarebbe recuperare una gamma di versioni con il metodo setTimeRange disponibili sulla classe Get in HBase .

per es.

{
    "row1" : {
        "columnFamily1" : {
            "column1" : {
                1 : "1",
                2 : "2"
            },
            "column2" : {
                1 : "1"
            }
        }
    }
}

Si tratta di un modello ragionevole per memorizzare i dati di serie temporali in HBase?

Il modello alternativo di immagazzinare dati in più colonne (è possibile interrogare tutti colonne) o righe più adatto?

È stato utile?

Soluzione

Non credo che si dovrebbe usare delle versioni per memorizzare le serie storiche qui. Non perché non funzionerà, ma perché non è progettato per quel particolare caso d'uso e ci sono altri modi.


suggerisco di memorizzare la serie storica come il passo tempo come il qualificatore colonna e il valore sarà i dati stessi. Qualcosa di simile:

{
    "row1" : {
        "columnFamily1" : {
            "col1-000001" : "1"
            "col1-000002" : "2"
            "col1-000003" : "91"
            "col2-000001" : "31"
            }
        }
    }
}

Una cosa bella è che i negozi HBase le qualificazioni delle colonne in modo ordinato, in modo che quando la lettura del tempo di serie di nuovo si dovrebbe vedere gli elementi in ordine.


Un'altra opzione realistica sarebbe quella di avere l'identificatore per il record come la prima parte della rowkey, ma poi hanno il passo temporale nella rowkey pure. Qualcosa di simile:

{
    "fooseries-00001" : {
        "columnFamily1" : {
            "val" : "1"
            }
        }
    }
    "fooseries-00002" : {
        "columnFamily1" : {
            "val" : "2"
            }
        }
    }

}

Questo ha la simpatica caratteristica che sarà abbastanza facile da fare scansioni gamma in una serie particolare. Ad esempio, tirando fuori i passi di fooseries 104-199 sta per essere piuttosto banale da implementare e essere efficiente.

Lo svantaggio di questo è l'eliminazione di un'intera serie sta andando richiedere un po 'più di gestione e sincronizzazione. Un altro aspetto negativo è che analisi MapReduce stanno per avere un tempo difficile fare qualsiasi tipo di analisi su questi dati. Con l'approccio di cui sopra, l'intera serie tempo sarà passata ad una chiamata map(), mentre qui, map() verrà chiamato per ogni fotogramma.

Altri suggerimenti

Se dovessi costruire una soluzione di serie storiche su HBase avrei sicuramente dare un'occhiata alla http://opentsdb.net/ di liberatoria open source da StumbleUpon, come in uso internamente SU io ritengo che sia stabile e ricevere supporto continuo.

Date un'occhiata al Zohmg .

In realtà c'è un Libro di nome: "un modello di dati tridimensionale HBase per i grandi l'analisi di dati di serie temporali" (2012) ( solo diapositive ) che mostra le prestazioni migliorate per un modello di dati che sfrutta il campo versione di HBase, come l'interrogante, proposto . Ma non è stato progettato per lo svolgimento di "versioni" infinite, ma un secchio di cellule (sensorData per un'ora o un giorno).

+1 per openTSDB Fa molti trucchi per le query rollup basati sul tempo Semplifica.

Per quanto riguarda la domanda iniziale, si può avere il maggior numero di versioni di cellule come si desidera (non c'è limite). Non v'è alcuna penalizzazione delle prestazioni, 'Avanti' implementato come Scan comunque in HBase e setTimeRange è il filtro molto efficace.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top