Just a short message to say I'm enjoying the detail of the posts here.
A lot of what is being mentioned pricks up my interest with my own developments in software.
With my past experiences using Arduino and also together with Modbus, I have concluded using Arduino is fine for data pass through or as low level discrete I/O interfacing.
I think like you are seeing David, using SD with Ethernet on Arduino is usually painfully slow and while the concepts are there to do it, in practice, many challenges pop up along the way.
Using a small board like Cubieboard II or better immediately allows for greater things in terms of logging.
I have Debian installed in the NAND and did have a small 40GB laptop drive connected to the SATA at one point, with that being my root file system I recall.
It worked quite well, but went back to simple NAND with the idea of using either SD or USB memory for storing logged data.
Now, Quadlog works well in NAND and the plan is to have configurable options that allow the user to specify the drive mount for all logged data to avoid the constant log writing to NAND.
It's all being stored in SQLite database.
I have often wanted to know what sort of rates do people wish to store their data ?
In my industrial projects, it has been mostly from 10 seconds up to around 5 or 10 minutes, but I don't recall 1 second rates being of any use, not unless it is a scientific application. And then it would only need short burst data logging. This is something I am thinking about. To be able to configure specific data tags to be logged in burst mode. This means, log every sample obtained from the device at what every the poll rate for that device is.
For my own logging, I set it to every 60 seconds at most. any more and it becomes too much data to really be of any use.
Another thing that is possible, and something I do, even in the Arduino, is to use CoS or CoV, Change of State or Change of Value.
I do this as part of my analog processing class and can set specific setpoints for the amount of change required to trigger a CoV flag.
If you then extend this idea out to logging, then you can see that for data values that don't really change a lot, you are not wasting space on logging.
This idea also has implications in the communications as well. If the flag is not set, then nothing needs to be communicated from source to destination, as in Arduino to Cubieboard, for example.
For Modbus RTU, using USB I have been able to set poll rates down to less than 100mSec with no errors, and a little quicker again for Modbus TCP. I think 50mSec was about as fast as I could drive it I recall.
This is using libmodbus library that I use in Quadlog.
This means that it would appear possible to have very fast logging, such as short period burst mode.
This sort of logging could be useful for issue tracking, but it needs careful attention to everything, beginning from point of measurement.
In regards to HighCharts, I have played with many data sizes and don't recall experiencing any issues with performance or display sizing, but I have found there are optimum sample sizes that appear better on the screen. Then it is a simple matter of scrolling either a full screen or half screen in either direction by making an AJAX request for that data set.
Currently I get the HIghChart data set as CSV in a HTTP AJAX request and am looking into other possibilities.
On smartphones, displaying charts can be a challenge and that will always be the case when working with physically small screens and plotting data.
All interesting ideas, I better pull my finger out and get to do more programming

____
Paul