2009-10-26 27 views
36

Sto cercando di capire esattamente cosa siano realmente questi nuovi archivi di dati con funzioni come bigtable, hbase e cassandra.memorizzando enormi quantità di dati di serie temporali in derivati ​​bigtable

Io lavoro con enormi quantità di dati del mercato azionario, miliardi di righe di dati prezzi/quote che possono aggiungere fino a 100s di gigabyte ogni giorno (sebbene questi file di testo spesso comprimano almeno di un ordine di grandezza). Questi dati sono fondamentalmente una manciata di numeri, due o tre stringhe brevi e un timestamp (di solito al millisecondo). Se dovessi scegliere un identificatore univoco per ogni riga, dovrei selezionare l'intera riga (poiché uno scambio può generare più valori per lo stesso simbolo nello stesso millisecondo).

Suppongo che il modo più semplice per mappare questi dati su bigtable (sto includendo le relative derivate) sia per nome di simbolo e data (che può restituire una serie temporale molto ampia, più di milioni di punti dati non sono inauditi) . Dalla lettura delle loro descrizioni, sembra che più chiavi possano essere utilizzate con questi sistemi. Suppongo anche che i numeri decimali non siano buoni candidati per le chiavi.

Alcuni di questi sistemi (Cassandra, ad esempio) afferma di essere in grado di eseguire query di intervallo. Sarei in grado di interrogare in modo efficiente, ad esempio, tutti i valori per MSFT, per un dato giorno, tra le 11:00 e le 13:30?

E se voglio cercare tra TUTTI i simboli per un determinato giorno e richiedere tutti i simboli che hanno un prezzo tra $ 10 e $ 10.25 (quindi sto cercando i valori e voglio che le chiavi vengano restituite come risultato)?

Cosa succede se voglio ottenere due serie di volte, sottrarre l'una dall'altra e restituire le due serie di volte e il loro risultato, dovrò fare la sua logica nel mio programma?

Leggere documenti pertinenti sembra dimostrare che questi sistemi non sono molto adatti per i massicci sistemi di serie storiche. Tuttavia, se i sistemi come google maps sono basati su di essi, penso che anche le serie temporali dovrebbero funzionare. Ad esempio, pensa al tempo come all'asse x, ai prezzi come asse y e ai simboli come posizioni nominate - tutto ad un tratto sembra bigtable dovrebbe essere lo store ideale per le serie temporali (se l'intera terra può essere immagazzinata, recuperata , ingrandito e annotato, i dati del mercato azionario dovrebbero essere banali).

Un esperto può indicarmi la giusta direzione o chiarire eventuali equivoci.

Grazie

risposta

20

Io non sono un esperto ancora, ma sono stato a giocare con Cassandra per un paio di giorni ormai, e ho alcune risposte per voi:

  1. Non ti preoccupare sulla quantità di dati, è irrilevante con sistemi come Cassandra, se hai $$$ per un grande cluster hardware.

Alcuni di questi sistemi (Cassandra, per esempio) sostiene di essere in grado di fare le query gamma. Sarei in grado di interrogare in modo efficiente, ad esempio, tutti i valori per MSFT, per un dato giorno, tra le 11:00 e le 13:30?

Cassandra è molto utile quando si sa come lavorare con le chiavi. Può passare rapidamente attraverso i tasti molto rapidamente. Quindi, per cercare MSFT 11:00-01:30, dovreste digitare le righe come questo:

MSFT-timestamp, GOOG-timestamp, .etc Poi si può dire a Cassandra di trovare tutte le chiavi che inizia con MSFT-now e termina con MSFT-ora + 1 ora.

Cosa fare se si desidera cercare tra TUTTI i simboli per un dato giorno e richiedere tutti i simboli che hanno un prezzo compreso tra $ 10 e $ 10,25 (quindi sto cercando i valori e voglio che le chiavi vengano restituite come risultato)?

Non sono un esperto, ma finora mi sono reso conto che Cassandra non cerca affatto valori. Quindi, se vuoi fare quanto sopra, dovrai creare un'altra tabella dedicata proprio a questo problema e progettare lo schema per adattarlo al caso. Ma non sarà molto diverso da quello che ho descritto sopra. Si tratta di nominare le tue chiavi e colonne. Cassandra può trovarli molto velocemente!

Cosa devo fare per ottenere due volte serie, sottrarre l'uno dall'altro, e restituire la serie due volte e il loro risultato, dovrò fare la sua logica nel mio programma?

Corretto, tutta la logica viene eseguita all'interno del programma. Questo non è MySQL. Questo è solo un motore di archiviazione. (Ma sono sicuro che le prossime versioni offriranno questo genere di cose)

Per favore, ricordati che sono un novizio in questo, se sbaglio, sentiti libero di correggermi.

+1

quando dici "puoi dire a Cassandra di trovare tutti i tasti che iniziano con MSFT-ora e termina con MSFT-ora + 1ora" - Intendi Query RowSclice ?? Voglio dire se chiedo a cassandra di darmi tutti i tasti di riga tra t1 e t2, essendo un timestamp, è efficiente. Ho sentito che rowSlices non è efficiente come le slice di colonne in Cassandra? – Peter

11

Qualcuno che rispetto ha raccomandato il database Open Time Series. In particolare, che lo schema era il più bello che avesse mai visto.

http://opentsdb.net/

+0

A parte essere carino, è GRATIS! –

+1

OpenTSDB è abbastanza buono, sfortunatamente non si adatta ai dati finanziari, soprattutto se si sta tentando di memorizzare i dati tick con una risoluzione superiore a una seconda (OpenTSDB ha attualmente solo una risoluzione fino a un secondo). – Datageek

2

'sono in piedi di fronte alla stessa montagna. Il mio problema principale con cassandra è che non riesco a ottenere un flusso sul set di risultati, ad esempio sotto forma di un iteratore.

Sto guardando già su e giù i documenti e la rete, ma niente.

non riesco a recuperare tutte le chiavi e quindi ottenere le righe come miliardi di righe rende questo impossibile.

+0

Appena incontrato lo stesso problema. Vorrei che ci fosse un modo semplice per creare un flusso di risultati di query. Posso attraversarli velocemente, non posso permettermi di averli tutti in memoria in una volta ... Hai trovato qualche soluzione? – em70

+0

Ciao emaster70, no non ho trovato una soluzione. Saluti – user1052080

0

Solo per ragioni di completezza la lettura di questo nel 2018, v'è ora un database speciale solo per i dati TimeSeries chiamato TimescaleDB

http://www.timescale.com/

Questo blog vale la pena leggere, spiega perché è superiore a soluzioni come Cassandra per quel caso speciale e perché hanno deciso di costruirlo sopra il database relazionale PostgreSQL

https://blog.timescale.com/time-series-data-why-and-how-to-use-a-relational-database-instead-of-nosql-d0cd6975e87c