Handling and parsing large CSV files

using parseFloat will be ok for the timestamp if you never exceed the limits of float (6 to 7 significant digits), but I would store it as an unsigned long in Record if you want to do calculations with millis.

It would have been better if you had stored the data on the SD card as binary data (actual unsigned long and floats) instead of ASCII, that avoids the need to parse the data, and allows you to index into the file if you want a specific record.

The SD card is read into a 512 byte buffer, there will always be a slight delay when that buffer needs to be refilled.

Looks like you are converting the floats to a number from 0 - 180 for the servo position - why not do that conversion when you read the data, then Record can store the data as byte instead of float, giving you the ability to store a much larger buffer of data. Also, if you never use certain data there is no need to store it at all - you never appear to use Record.lux or Record.AngZ, although that may be because you did not include it in the test code).