Come devono essere gestiti i calcoli in un database di documenti

4

Ok, quindi ho un programma che registra gli errori in un database nosql. Al momento c'è un solo modello per un errore e il suo è memorizzato come un documento nel database nosql.

Fondamentalmente voglio riassumere diversi errori e produrre un riepilogo dei "tipi" di errori verificatisi.

Tradizionalmente in un database SQL questa normalizzazione funzionerebbe con raggruppamenti, somme e medie, ma in un database NoSQL presumo di dover usare mapreduce.

Il mio modello attuale sembra inadatto all'attività, come dovrei cambiare il modo in cui memorizzo i "modelli" al fine di semplificare l'analisi statistica? Un database NoSQL potrebbe essere lo strumento giusto per questo tipo di problema?

Sto memorizzando cose nella BigTable di Google AppEngine, quindi ci sono alcune limitazioni a cui pensare.

    
posta Morten 17.12.2010 - 08:39
fonte

3 risposte

1

In breve, Datastore di AppEngine potrebbe non essere lo strumento giusto per questo lavoro, ma cercherò comunque di modellarlo.

Vorrei aggiungere qualche altro modello a ciò che già possiedi. Presumo tu ne abbia già uno simile:

class LoggedError(db.Model):
    full_stacktrace = db.StringProperty() 
    error_type_name = db.StringProperty()
    code_line = db.IntegerProperty()

Vorrei quindi creare un altro modello solo per memorizzare le occorrenze dei diversi tipi di errori. Ci sarà un'istanza di questo per ciascun tipo di errore

class ErrorOccurrences(db.Model):
    error_type_name = ...
    error_type_count = db.IntegerProperty()
    list_of_occurrences = db.ListProperty(int) # the line numbers the error happens on

Le tre scelte che vedo per il popolamento di ErrorOccurrences sarebbero

  1. Aggiungi a ErrorOccurrences.list_of_occurrences quando si registrano gli errori
  2. Imposta un'attività o un cron job per scansionare manualmente LoggedError.all()
  3. Esegui MapReduce dopo aver aggiunto i tuoi errori.

Se si registrano continuamente errori, # 1 sarà la scelta migliore. Se segui questo approccio, avere il contatore collegato a ErrorOccurrences potrebbe non essere il metodo migliore. Puoi creare un modello di contatore separato utilizzando il metodo Contatore spezzato per creare in modo più efficiente il tuo sommario, se non lo fai Devo fornire subito i numeri di linea. Ciò significherebbe anche che stai facendo almeno 3 scritture sul datastore per ogni errore rispetto a uno solo.

Spero che questa risposta abbia un senso, e buona fortuna.

    
risposta data 04.01.2011 - 18:40
fonte
0

Prova a guardare Hadoop wikipedia

Non so se funziona con il tuo DB.

Forse questo post sarà utile: archivio di posta

    
risposta data 17.12.2010 - 09:18
fonte
0

Perché non aggiungere semplicemente una colonna di classificazione alla tabella? Qualcosa come "errorType: ReallyBadError".

Quindi "mappali" su errorType e "riduci" con, ad esempio, una funzione "Sum".

    
risposta data 22.12.2010 - 20:42
fonte

Leggi altre domande sui tag