Bucketing model by time

0

Ho un modello con entità con data e ora. Ora voglio fare il bucketing - "bucket" di entità che possono essere ragionate su una singola entità. Voglio anche poter accedere alle entità correlate da un bucket e ottenere un bucket di tali entità.

Le mie preoccupazioni principali sono l'implementazione del bucketing stesso e l'architettura del codice dietro questo.

  1. Devo creare un modello separato per i dati con bucket, o dovrei implementare strumenti per lavorare con il modello esistente?
  2. Come ho già una metamodella con tutte le sottoclassi e le relazioni Mi piacerebbe poter aggiungere facilmente il benna sopra. Ho pensato a sottoclassi di tutto il classi di entità per creare una classe entità-bucket che lo farebbe estendi la funzionalità del bucket comune con i tratti.
posta Uko 02.12.2013 - 10:57
fonte

2 risposte

1

Senza conoscere il tuo metamodel, supponendo che tu voglia rispettarlo, è probabile che qualsiasi risposta sia difettosa. Il tuo problema sembra che potrebbe essere risolto da diversi tipi di approcci. Spiegherò alcuni e puoi sceglierne uno! ;)

Inheritance È possibile creare un genitore per tutti gli oggetti che implementano tutti i metodi della sottoclasse e presenta il bucket, un elenco o una mappa di qualche tipo. L'implementazione spetterebbe a te.

Utilizzo di un'interfaccia È possibile creare un'interfaccia che offra tutti i metodi necessari e quindi creare due tipi di oggetti. Il tuo secchio e l'oggetto contenuto nel secchio. Entrambi, implementando l'interfaccia, espongono i metodi necessari.

Disposizione dei file Puoi usare uno dei due sopra mentre avvolgi i file del tuo progetto con un altro oggetto. Potresti quindi implementare il bucket indipendentemente dall'oggetto che dovrebbe contenere, in quanto dovrai sempre gettare l'oggetto wrapper in esso.

Qualunque cosa tu scelga, tutti questi hanno i loro svantaggi e vantaggi. Come ho detto prima, senza saperne di più, è difficile affrontare davvero il problema.

    
risposta data 23.12.2013 - 15:46
fonte
0

Sembra che i bucket siano molto semplici da calcolare in base al timestamp diviso per un numero. Ad esempio timestamp / 60 questo ti darebbe secchi di 1 minuto.

Se non è necessario memorizzare in modo permanente i bucket, scriverei una funzione che itera su tutti gli eventi e restituisce un hash di elenchi. Dove hash [23100517] restituisce un elenco di tutti gli eventi in quel bucket. Quindi puoi semplicemente lavorare con questo hash. Anche trovare il secchio di una nuova entità è molto semplice. Potresti anche scrivere una classe membro simile a:

model.get_time_bucket(seconds)
{
  return floor(self.timestamp / seconds);
}

e poi chiama questo con 60 o qualunque sia la dimensione del tuo bucket.

    
risposta data 03.12.2013 - 01:40
fonte

Leggi altre domande sui tag