Szenario: Ich habe einen Dienst, die Ereignisse wie in diesem CSV Beispiel protokolliert:einkochen Ereignisse zu Zeitintervallen
#TimeStamp, Name, ColorOfPullover
TimeStamp01, Peter, Green
TimeStamp02, Bob, Blue
TimeStamp03, Peter, Green
TimeStamp04, Peter, Red
TimeStamp05, Peter, Green
Ereignisse, die zum Beispiel Peter trägt Grün wird sehr oft in Folge auftreten.
Ich habe zwei Ziele:
- die Daten halten so klein wie möglich
- Halten Sie die alle relevanten Daten
Relevant heißt: ich wissen muss, in denen Zeit Spannweite eine Person war tragen, welche Farbe. Z. B:
#StartTime, EndTime, Name, ColorOfPullover
TimeStamp01, TimeStamp03, Peter, Green
TimeStamp02, TimeStamp02, Bob, Blue
TimeStamp03, TimeStamp03, Peter, Green
TimeStamp04, TimeStamp04, Peter, Red
TimeStamp05, TimeStamp05, Peter, Green
In diesem Format kann ich beantworten Fragen wie: Welche Farbe wurde Peter zum Zeitpunkt TimeStamp02 tragen? (Ich kann sicher davon ausgehen, dass jede Person in die gleiche Farbe trägt zwischen zwei Ereignisse für die gleiche Farbe angemeldet.)
Haupt Frage: Kann ich eine bereits bestehende Technologie nutzen, das zu erreichen? I.e. Ich kann es mit einem kontinuierlichen Strom von Ereignissen versorgen und es extrahiert und speichert die relevanten Daten?
Um genau zu sein, muss ich einen Algorithmus wie diesen (Pseudocode) implementieren. Die Methode OnNewEvent
wird für jede Zeile des CSV-Beispiels aufgerufen. Wobei der Parameter event
bereits die Daten aus der Zeile als Member-Variablen enthält.
def OnNewEvent(even)
entry = Database.getLatestEntryFor(event.personName)
if (entry.pulloverColor == event.pulloverColor)
entry.setIntervalEndDate(event.date)
Database.store(entry)
else
newEntry = new Entry
newEntry.setIntervalStartDate(event.date)
newEntry.setIntervalEndDate(event.date)
newEntry.setPulloverColor(event.pulloverColor))
newEntry.setName(event.personName)
Database.createNewEntry(newEntry)
end
end
Es sollte möglich sein, sie mit logstash zu tun, aber das Problem ist, dass Sie für jede Zeile eine Elasticsearch Anfrage zu tun haben, werden die neuesten Eintrag abzurufen, die das machen Prozess sehr langsam. Deshalb halte ich Logstash nicht für das richtige Werkzeug. – baudsp
Was sind Ihre Datenmengen und wie schnell müssen Sie reagieren, wenn ein neues Ereignis eintritt? Ist es in Ordnung, wenn einige Ereignisse verloren gehen? – ffeast
Die Reaktion auf Ereignisse kann langsam sein. Z.B. 1 Tag Verspätung ist akzeptabel. Also, ein Cron-Job einen Tag könnte eine Option sein. Ereignisse können nicht verloren gehen, das ist geschäftskritisch. – fex