15k registra ogni 3 minuti, suona molto simile a quello che ho usato per vedere con applicazioni di monitoraggio di rete nei data center (SNMP può diventare molto rumoroso in quel tipo di ambiente). Quello che faremmo è determinare quanti dei dati abbiamo bisogno, per quanto tempo, a quale livello di granularità, e quali informazioni vanno a determinare quale tipo di strategia di roll-up usare - anche, quanto spazio di archiviazione eravamo disposti gettare il problema Con una strategia di roll-up in cui si combinano le righe temporali, unendo le colonne, è possibile assicurarsi che vi sia un limite limitato alle dimensioni del database.
Probabilmente ci sono nuovi strumenti in questi giorni ma ho utilizzato RRD (http://oss.oetiker.ch/rrdtool/) e BerkeleyDB per esempio per questo tipo di problemi di monitoraggio. È anche possibile trarre vantaggio da qualche deduplicazione software, un approccio in cui si aggiorna semplicemente un conteggio se una riga viene trovata simile a una riga precedente, in base alla natura del contenuto delle sue colonne. Lo facevamo per evitare che le tempeste degli eventi invadessero gli schermi NOC e facessero perdere ai tecnici eventi critici. A proposito, avrei lasciato questo come commento, ma StackOverflow fa questa cosa di reputazione che mi impedisce e ho iniziato a rispondere alle domande qui ieri.
Quindi, per essere più completo, utilizzando i dati come esempio:
Req Success OrderFunction 5 60ms WebServer2
Req Failed OrderFunction 2 176ms WebServer5
Resp Success SuggestFunction 8 45ms WebServer2
presumo Req/Resp sono gli unici due valori - corrispondente alla richiesta e risposta? Se questo è il caso, rendi quella colonna binaria, 1 bit - che si tratti di una richiesta o meno. La seconda colonna, Successo/Non riuscito, ha un tono simile a 1 bit o al peggiore ternario, a 2 bit. Le funzioni (OrderFunction, SuggestFunction, ecc.) Possono probabilmente essere enumerate - o se stai facendo la deduplicazione qui potresti renderla una maschera di bit. Potresti anche usare una chiave esterna per questo in una tabella di join. Nell'opzione enumerata, diciamo che hai meno di 256 di questi, ma più di 128, usa un byte.Se si riescono a raggrupparli in una soluzione di deduplicazione di un evento per salvare le righe, specialmente quando arrivano velocemente così, e si hanno 256 opzioni, allora è necessario esattamente quel numero di bit per la propria maschera di bit, a meno che non sia il caso in cui non è richiesta la rappresentazione di tutte le permutazioni, nel qual caso, calcolare il numero massimo di permutazioni, e cioè il numero di bit nella maschera di bit per la deduplicazione da ottenere correttamente. La prossima colonna con 5,2 e 8 in esso, non sono sicuro di ciò che rappresenta, un numero intero di qualche tipo o forse solo un byte? I millisecondi possono essere rappresentati, a seconda del tuo dialetto SQL e dei massimi millisecondi che ti aspetti di dover rappresentare, con un int o forse un corto senza segno, o forse solo un corto (che sarebbe sostanzialmente di circa 32,7 secondi). Se si utilizza il cortocircuito breve o senza segno, accertarsi che un valore oltre il limite massimo sia rappresentato come massimo e non uguale a zero nella logica dell'applicazione. L'ultima colonna sembra una stringa che rappresenta i tuoi server, quindi è probabilmente una colonna che useresti per guidare la deduplicazione o il rollup. Quindi potresti renderlo una chiave straniera, forse.
In ogni caso, RRD era molto buono, ma non l'ho usato da più di una dozzina di anni. Lo riprendo, non uso RRD da più di una dozzina di anni :). Sono sicuro che BerkeleyDB sia ancora un buon database per questo tipo di cose - quindi dai un'occhiata a quegli strumenti e strumenti come loro e sono sicuro che ne uscirà una buona soluzione.
Spero che questo aiuti!
Mi sembra una normale tupla nel database. – darijan
Sì, ma tenerlo così in classe è un dolore. Ci sono 15k record in un intervallo di 3 minuti. – Xelom
Quindi pensa di tenerlo in un database relazionale e di estrarre le informazioni necessarie attraverso una serie di servizi. OPPURE, si potrebbe fare tutto ciò con la struttura corrente e gli oggetti reali, ma abilitando la persistenza di quegli oggetti (di solito automatici, su creazione e modifica) in un database di oggetti (si veda ad esempio Versant). – darijan