Hallo,
Ik ben op zoek naar een oplossing voor mijn storage-uitdaging. Het (enigszins versimpelde) probleem: er moet zeer veel (timed) data worden opgeslagen, afkomstig van verschillende nodes. Denk hierbij aan een tijdstip met de temperatuur, luchtvochtigheid e.d. Er zullen om te beginnen ongeveer 100 entries per seconde worden toegevoegd, wat allemaal een jaar blijft staan, dus het zou om een paar miljard entries gaan. Later neemt dit waarschijnlijk nog (sterk) toe.
Voor elke data-source zullen er een paar van deze waarden worden bijgehouden, allemaal gemiddeld één keer per minuut, maar niet per sé op vaste tijden / intervallen. De data per data-source zal dus meevallen, het grote aantal entries wordt bereikt door de vele data-sources. Af en toe zullen er range queries op de data worden gedaan, bijvoorbeeld “wat was de gemiddelde luchtvochtigheid tussen … en …”, maar er zullen vele malen meer write acties gedaan worden, dus de performance daarvan is in principe belangrijker. Het hele idee lijkt sterk op de monitoring van servers, maar dan net wat anders (geen vaste intervallen).
De vraag is dus met welke oplossing dit het beste te bereiken is. Uiteindelijk zal er één storage API moeten komen waar nodes hun data naartoe pushen, en waarop ook weer de range queries gedaan kunnen worden. Verder zal het schaalbaar moeten zijn over meerdere storage servers, mocht de data in de toekomst verder groeien.
RRDtool valt af; er zijn geen vaste intervallen en verder is het met RRD sowieso lastig cachen / transacties batchen waardoor je waarschijnlijk snel tegen IO problemen aanloopt.
Ik had zelf het idee een soort eigen opslag te knutselen met SQL databases (MySQL, MariaDB, …), en het daarmee ook te verdelen over de servers. De centrale API server ontvangt in dat geval de requests, houdt zelf in een SQL database een lijst bij met welke data-entries op welke storage servers staan, en stuurt de data of requests daarna door naar de juiste storage server. Op die storage server draait dan ook weer een SQL database, maar dan flink geoptimaliseerd voor de miljoenen kleine entries die opgeslagen worden.
Als laatste puntje zijn backups nog wel nodig, als er een paar entries verloren gaat is dat geen groot probleem, maar de historische data moet wel bewaard blijven. Hiervoor leek ZFS met snapshots me een oplossing.
Misschien hebben jullie nog (betere) ideeën voor deze case. Ik ben zelf niet helemaal into technieken als NoSQL / hadoop / cassandra etcetera, zouden die hier geschikt voor zijn en moet ik me daarin gaan verdiepen?
Als er wat in je opkomt, gooi het maar neer, misschien stuurt het me de goede richting in.
Alvast bedankt!