Scénario: J'ai un service qui enregistre des événements comme dans cet exemple CSV:Faire bouillir vers le bas des événements à des intervalles de temps
#TimeStamp, Name, ColorOfPullover
TimeStamp01, Peter, Green
TimeStamp02, Bob, Blue
TimeStamp03, Peter, Green
TimeStamp04, Peter, Red
TimeStamp05, Peter, Green
événements qui par exemple Peter porte Vert se produira très souvent dans une rangée.
J'ai deux objectifs:
- Conserver les données aussi faible que possible
- Conserver tous les pertinentes données
moyens pertinents: Je dois savoir, dans lequel temps traves une personne était portant quelle couleur. Par exemple:
#StartTime, EndTime, Name, ColorOfPullover
TimeStamp01, TimeStamp03, Peter, Green
TimeStamp02, TimeStamp02, Bob, Blue
TimeStamp03, TimeStamp03, Peter, Green
TimeStamp04, TimeStamp04, Peter, Red
TimeStamp05, TimeStamp05, Peter, Green
Dans ce format, je peux répondre à des questions comme: Quelle couleur a été Peter portait au moment TimeStamp02? (Je peux supposer que chaque personne porte la même couleur entre les deux événements pour la connecté même couleur.)
question principale: Puis-je utiliser une technologie déjà existante pour y parvenir? C'est à dire. Je peux le fournir avec un flux continu d'événements et il extrait et stocke les données pertinentes?
Pour être précis, je dois mettre en œuvre un algorithme comme celui-ci (pseudo-code). La méthode OnNewEvent
est appelée pour chaque ligne de l'exemple CSV. Le paramètre event
contient déjà les données de la ligne en tant que variables membres.
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
Il devrait être possible de le faire avec logstash, mais le problème est que vous devez faire une demande de ElasticSearch pour chaque ligne pour récupérer la dernière entrée, qui fera la processus très lent. C'est pourquoi je ne pense pas que logstash soit le bon outil pour cela. – baudsp
Quels sont vos volumes de données et à quelle vitesse devez-vous réagir lorsqu'un nouvel événement se produit? Est-ce correct si certains événements sont perdus? – ffeast
La réaction aux événements peut être lente. Par exemple. Un jour de retard est acceptable. Donc, un emploi cron un par jour pourrait être une option. Les événements ne peuvent pas être perdus, c'est critique. – fex