The queuing of data is quite powerful since you break up the processes. However, I would make a major change to your program. For the Analog Input, do not use the express VI. Setup the analog input task before the loop and close it after. Then inside the loop, use the DAQmx Read set up to be Single Channel, N Samples Waveform. By reading the waveform, the timestamp is included for free. And when you setup the timing of the task, use Continuous Samples. Your 6009 does have hardware timing for the analog input, so by all means use it.
I would also use the DAQmx Streaming to TDMS feature to have your data go straight to a TDMS file instead of making your own. It will be even faster than your producer/consumer.