MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Statistiche in tempo reale:MySQL(/Drizzle) o MongoDB?

Quindi BuddyMedia sta usando parte di questo. Il Gilt Groupe ha fatto qualcosa di molto interessante con Hummingbird (node.js + MongoDB).

Avendo lavorato per un grande inserzionista online nello spazio dei social media, posso attestare che la creazione di report in tempo reale è davvero una seccatura. Cercare di "raggruppare" 500 milioni di impressioni al giorno è già una sfida, ma provare a farlo in tempo reale ha funzionato, ma ha comportato alcune limitazioni significative. (come se fosse stato effettivamente ritardato di 5 minuti :)

Francamente, questo tipo di problema è uno dei motivi per cui ho iniziato a utilizzare MongoDB. E non sono l'unico. Le persone utilizzano MongoDB per tutti i tipi di analisi in tempo reale:monitoraggio del server , registrazione centralizzata , oltre ai rapporti sulla dashboard.

La vera chiave quando si esegue questo tipo di report è capire che la struttura dei dati è completamente diversa con MongoDB, si eviteranno query di "aggregazione", quindi le query e i grafici di output saranno diversi. C'è del lavoro di codifica extra sul lato client.

Ecco la chiave che potrebbe indicarti la giusta direzione per farlo con MongoDB. Dai un'occhiata alla seguente struttura di dati:

{
  date: "20110430",
  gender: "M",
  age: 1, // 1 is probably a bucket
  impression_hour: [ 100, 50, ...], // 24 of these
  impression_minute: [ 2, 5, 19, 8, ... ], // 1440 of these
  clicks_hour: [ 10, 2, ... ],
  ...
}

Ci sono ovviamente alcune modifiche qui, indici appropriati, magari unendo dati+genere+età in un _id . Ma questa è una specie di struttura di base dell'analisi dei clic con MongoDB. È davvero facile aggiornare impression e clic { $inc : { clicks_hour.0 : 1 } } . Puoi aggiornare l'intero documento in modo atomico. Ed è davvero abbastanza naturale riferire. Hai già un array contenente i tuoi punti dati orari o minuti.

Spero che questo ti indichi nella giusta direzione.