Ik zit hier met het volgende probleem:
- We krijgen elke seconde 8000 metingen (1 per weerstation) binnen met tijd, stationnummer en windsnelheid. Dit slaan we zelf op in een database (mongodb). Dit is na 6 uur 172 800 000 entries in de database.
Nu willen we de snelste meting per station ophalen van de afgelopen 6 uur. Als het systeem een aantal uur draait dan is een sort / limit 1 niet meer te doen. Dit wordt gewoon te traag.
Nu dacht ik het geniale idee te hebben om wanneer de data binnen komt het per station te vergelijken met de vorige snelste waarde van dat station, als dat zo is, dan vervang je die en stop je de nieuwe snelste waarde in een losse collectie. Hierdoor bevat deze collectie (top_windspeeds) altijd de snelste 8000 waarde's.
Dit werkt, zolang de factor tijd niet meegerekend hoeft te worden. Een voorbeeld:
De eerste meting die ik binnen krijg voor station 3 is 10. Dit is nu de snelste, immers is het de eerste. Deze stop ik in een losse collectie. De volgende meting voor dit station is 11. Deze is sneller dan 10, 10 wordt verwijderd, 11 wordt er voor in de plaats gezet.
Nu komt het volgende uur elke keer een meting van rond de 9. Deze zijn allemaal langzamer dan 11 dus worden genegeerd en weggegooid. Nu komt het tweede uur een meting van 10.5 deze wordt ook genegeerd. Daarna komen de volgende 4 uur weer alleen metingen van rond de 9.
De waarde 11 welke in de DB staat is nu 6 uur oud. En is dus niet meer geldig (immers willen we de hoogste windsnelheid van de afgelopen 6 uur). De volgende snelste meting is die van 10.5 van 4 uur geleden, maar die is al vergeleken en weggegooid. Dus daar heb ik niets meer aan. Nieuwe metingen zijn bijvoorbeeld 8 en omdat de andere verlopen is wordt deze in de DB gestopt, terwijl die van 10.5 toch sneller was en binnen de tijd is.
Mijn vraag in het kort eigenlijk. Is het mogelijk om de snelste meting van de afgelopen 6 uur op te halen zonder alle metingen op te slaan?
Het idee wat ik had werkt wel als het om de snelste meting aller tijden gaat, maar dat is hier niet het geval.
- We krijgen elke seconde 8000 metingen (1 per weerstation) binnen met tijd, stationnummer en windsnelheid. Dit slaan we zelf op in een database (mongodb). Dit is na 6 uur 172 800 000 entries in de database.
Nu willen we de snelste meting per station ophalen van de afgelopen 6 uur. Als het systeem een aantal uur draait dan is een sort / limit 1 niet meer te doen. Dit wordt gewoon te traag.
Nu dacht ik het geniale idee te hebben om wanneer de data binnen komt het per station te vergelijken met de vorige snelste waarde van dat station, als dat zo is, dan vervang je die en stop je de nieuwe snelste waarde in een losse collectie. Hierdoor bevat deze collectie (top_windspeeds) altijd de snelste 8000 waarde's.
Dit werkt, zolang de factor tijd niet meegerekend hoeft te worden. Een voorbeeld:
De eerste meting die ik binnen krijg voor station 3 is 10. Dit is nu de snelste, immers is het de eerste. Deze stop ik in een losse collectie. De volgende meting voor dit station is 11. Deze is sneller dan 10, 10 wordt verwijderd, 11 wordt er voor in de plaats gezet.
Nu komt het volgende uur elke keer een meting van rond de 9. Deze zijn allemaal langzamer dan 11 dus worden genegeerd en weggegooid. Nu komt het tweede uur een meting van 10.5 deze wordt ook genegeerd. Daarna komen de volgende 4 uur weer alleen metingen van rond de 9.
De waarde 11 welke in de DB staat is nu 6 uur oud. En is dus niet meer geldig (immers willen we de hoogste windsnelheid van de afgelopen 6 uur). De volgende snelste meting is die van 10.5 van 4 uur geleden, maar die is al vergeleken en weggegooid. Dus daar heb ik niets meer aan. Nieuwe metingen zijn bijvoorbeeld 8 en omdat de andere verlopen is wordt deze in de DB gestopt, terwijl die van 10.5 toch sneller was en binnen de tijd is.
Mijn vraag in het kort eigenlijk. Is het mogelijk om de snelste meting van de afgelopen 6 uur op te halen zonder alle metingen op te slaan?
Het idee wat ik had werkt wel als het om de snelste meting aller tijden gaat, maar dat is hier niet het geval.
Claude: "Domain patterns emerge from iteration, not generation." - Tweakers Time Machine Extension | Chrome : FF