Domanda

Sto cercando di capire esattamente cosa sono realmente questi nuovi archivi di dati confusi come bigtable, hbase e cassandra.

Lavoro con enormi quantità di dati di borsa, miliardi di righe di dati di prezzi / quotazioni che possono aggiungere fino a 100s di gigabyte ogni giorno (anche se questi file di testo spesso vengono compressi di almeno un ordine di grandezza). Questi dati sono fondamentalmente una manciata di numeri, due o tre stringhe brevi e un timestamp (di solito livello di millisecondi). Se dovessi scegliere un identificatore univoco per ogni riga, dovrei scegliere 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 i suoi derivati) sia per nome simbolo e data (che potrebbe restituire una serie temporale molto grande, 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) affermano di essere in grado di eseguire query sul range. Sarei in grado di interrogare in modo efficiente, per esempio, tutti i valori per MSFT, per un determinato giorno, tra le 11:00 e le 13:30?

Cosa succede se desidero cercare TUTTI i simboli per un determinato 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)?

E se volessi ottenere due serie temporali, sottrarre l'una dall'altra e restituire le due serie temporali e il loro risultato, dovrò fare la sua logica nel mio programma?

La lettura di documenti pertinenti sembra dimostrare che questi sistemi non si adattano molto bene ai sistemi di serie storiche di massa. Tuttavia, se sistemi come Google Maps si basano su di essi, penso che anche le serie temporali dovrebbero funzionare. Ad esempio, pensa al tempo come all'asse x, ai prezzi come all'asse y e ai simboli come posizioni denominate - all'improvviso sembra che bigtable dovrebbe essere il negozio ideale per le serie temporali (se l'intera terra può essere immagazzinata, recuperata , ingranditi e annotati, i dati di borsa dovrebbero essere banali).

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

Grazie

È stato utile?

Soluzione

Non sono ancora un esperto , ma gioco con Cassandra da alcuni giorni e ho alcune risposte per te:

  1. Non preoccuparti della quantità di dati, è irrilevante con sistemi come Cassandra, se hai un $$$ per un cluster hardware di grandi dimensioni.
  

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

Cassandra è molto utile quando sai come lavorare con le chiavi. Può scorrere i tasti molto rapidamente. Quindi, per cercare MSFT tra le 11:00 e le 13:30, dovresti digitare le tue righe in questo modo:

Timestamp MSFT, timestamp GOOG, ..etc Quindi puoi dire a Cassandra di trovare tutte le chiavi che iniziano con MSFT-now e finiscono con MSFT-now + 1 ora.

  

Cosa succede se desidero cercare TUTTI i simboli per un determinato 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 ho capito che Cassandra non "cerca per valore. Quindi, se vuoi fare quanto sopra, dovrai creare un'altra tabella dedicata solo a questo problema e progettare il tuo schema per adattarlo al caso. Ma non sarà molto diverso da quello che ho descritto sopra. Si tratta di nominare chiavi e colonne. Cassandra può trovarli molto rapidamente!

  

E se volessi ottenere due serie temporali, sottrarre l'una dall'altra e restituire le due serie temporali 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 tipo di cose)

Per favore, ricorda che sono un principiante, se sbaglio, sentiti libero di correggermi.

Altri suggerimenti

Se hai a che fare con un enorme database di serie temporali, gli standard sono:

Questi non sono economici, ma possono gestire i tuoi dati in modo molto efficiente.

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

http://opentsdb.net/

'Sono in piedi davanti 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 già guardando su e giù per i documenti e la rete, ma niente.

Non riesco a recuperare tutte le chiavi e quindi ottenere le righe poiché miliardi di righe lo rendono impossibile.

Il driver Java DataStax consente il paging automatico in modo da trasmettere in streaming i risultati proprio come un iteratore ed è tutto integrato. Questo è in Cassandra 2.0.1 a proposito - http://www.datastax.com/dev/blog/client-side-improvements-in-cassandra -2-0

Solo per completezza leggendo questo nel 2018, ora esiste un database speciale solo per i dati della serie di attività denominati TimescaleDB

http://www.timescale.com/

Vale la pena leggere questo blog, spiega perché è superiore a soluzioni come Cassandra per quel caso speciale e perché hanno deciso di costruirlo sul database relazionale di PostgreSQL

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

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