I have built and app which does random stuff and I want to collect various statistics which I want to display in graphs. My problem is I’m not sure how to store the data in a database except writing each log into new row which seems very inefficient.
Example Data (5 minute averages):
- Number of Users
- Number of Online Users
- Number of Actions
What would be the best way to store this information? Do I need a separate table for thing that I’m logging or could they all go into one table?
Often you don’t need the full resolution data kept for all time and you can re-process it periodically into lower resolution data to save space. For example you could store one day of full resolution (5 minute averages) but periodically re-average that data into 1 hour bins/1 day bins/ 1 month bins/ etc while also culling the data.
This allows you to have the data you need to display nice graphs of the activity over different time ranges (hour, day, week, month, etc) while limiting the number of rows to just what your application requires.
There are also excellent applications to store and display time-series data. MRTG and RRDTool come to mind. See this tutorial for good food for thought:
rrdtutorial