2011-12-31 4 views
5

Sto lavorando a un progetto che registra l'aggregazione e l'analisi come parte di un progetto più grande. Non so quale database scegliere per gestire questi registri. Ultimamente sto andando avanti e indietro tra MongoDB e Cassandra, ma sono sicuro che ce ne sono altri che si adattano anche ai miei bisogni. Quale dovrei scegliere e perché?Mongodb vs Cassandra per l'aggregazione, la ricerca e l'analisi di molti registri

Il tutto è abbastanza all'inizio il momento, ma qui sono i requisiti finora:

  • log sono in formato syslog
  • query sono per lo più su una piccola stringa che ora è nel messaggio , ma lo otterrò in un campo separato. E ci saranno anche filtri basati su data, gravità o tag. Molto raramente, le persone cercano solo una stringa casuale all'interno del messaggio.
  • analisi ogni ora da alcune delle voci di registro
  • tenere i registri di un periodo di tempo configurabile
  • più arriverà, sono sicuro :) Ecco perché sto pensando NoSQL è più appropriato, perché possiamo cambia lo schema.

Ci si aspetta di far crescere il database per alcuni TB di dati (e ~ 50K di inserzioni al secondo), quindi la condivisione è un must. Le query non sono così frequenti, perché sono utilizzate principalmente dagli sviluppatori del progetto più grande. Ma un risultato deve essere restituito in pochi secondi.

Al momento, lo spazio di archiviazione è comune (e lento) per tutte le macchine. Quindi, per la scalabilità, suppongo che dobbiamo fare il miglior uso della memoria e del multithreading, in modo che la sharding abbia senso.

Le idee di base ho ottenuto finora è che MongoDB ha più funzioni, come espressione regolare o l'ordinamento dei risultati, ed è più facile installazione per una configurazione decente, mentre Cassandra sembra più scalabile (da server semplicemente aggiungendo), e ha anche un alcune caratteristiche pulite, come mettere un TTL sui dati.

+0

ho finito per usare elasticsearch. Dai un'occhiata qui per ulteriori informazioni: [link] (http://www.elasticsearch.org/tutorials/2012/05/19/elasticsearch-for-logging.html) –

risposta

2

MongoDB suona come una buona misura per le vostre esigenze. Ecco perché:

  • indici: dal momento che si desidera eseguire query occasionali, è opportuno non doverli mantenere nella propria app o avere un'app di ricerca separata (Lucene).
  • bilanciato (supporto sharding incorporato, replica)
  • le scritture sono asincrone (per impostazione predefinita, è possibile renderle sincrone), ovvero non bloccanti e veloci. Potresti perdere alcuni in determinati scenari di errore, ma per i log e l'analisi non farebbe differenza.
  • API di query abbastanza potente (non come relazionale, nessun join, ma meglio di tutti gli altri negozi di valori chiave nosql, e suona più potente di quello che offre Cassandra).

Si potrebbe anche trovare una configurazione adeguata per averlo in una configurazione non-sharded. Ad esempio, per impostazione predefinita si sincronizza su disco ogni 60 secondi, il che significa che verranno bufferizzati 60 secondi di scritture riducendo quindi l'IO. L'ho provato su un mezzo terabyte di dati su una singola macchina e una singola query di campo indicizzata eseguita in cca 100-200ms.

+0

Grazie mille per la tua risposta. Si adatta a quello che ho in mente in questo momento, che è quello di andare con MongoDB e poi magari passare a qualcos'altro solo se mi imbatto in problemi. –

5

I datastore scarsamente colonnari come Apache Cassandra sono eccellenti per aggregare i dati delle serie temporali.Vedere i seguenti articoli per gli esempi:

+0

Stai parlando del fatto che Cassandra memorizza automaticamente un timestamp per ogni colonna? All'inizio ho pensato che fosse davvero utile per me, ma poi mi sono reso conto che in realtà avevo bisogno di un timestamp diverso: quello in cui l'evento è generato sul server, non quando l'evento è arrivato all'aggregatore di log. Se pensi che mi manchi qualcosa, puoi scrivere qualche dettaglio? –

+0

Mi riferisco in particolare all'approccio alla modellazione dei dati. Il concetto di timestamp di Cassandra non ha nulla a che fare con questo. Si prega di leggere gli articoli di cui sopra - forniranno alcune informazioni su come strutturare le famiglie di colonne per l'archiviazione dei dati di registro. – zznate

Problemi correlati