I am about to start collecting large amounts of numeric data in real-time (for those interested, the bid/ask/last or 'tape' for various stocks and futures).  The data will later be retrieved for analysis and simulation.  That's not hard at all, but I would like to do it efficiently and that brings up a lot of questions.  I don't need the best solution (and there are probably many 'bests' depending on the metric, anyway).  I would just like a solution that a computer scientist would approve of.  (Or not laugh at?)
(1) Optimize for disk space, I/O speed, or memory?
For simulation, the overall speed is important.  We want the I/O (really, I) speed of the data just faster than the computational engine, so we are not I/O limited.  
(2) Store text, or something else (binary numeric)?
(3) Given a set of choices from (1)-(2), are there any standout language/library combinations to do the job-- Java, Python, C++, or something else?
I would classify this code as "write and forget", so more points for efficiency over clarity/compactness of code.  I would very, very much like to stick with Python for the simulation code (because the sims do change a lot and need to be clear).  So bonus points for good Pythonic solutions.
Edit: this is for a Linux system (Ubuntu)
Thanks
Actually, this is quite similar to what I'm doing, which is monitoring changes players make to the world in a game. I'm currently using an sqlite database with python.
At the start of the program, I load the disk database into memory, for fast writing procedures. Each change is put in to two lists. These lists are for both the memory database and the disk database. Every x or so updates, the memory database is updated, and a counter is pushed up one. This is repeated, and when the counter equals 5, it's reset and the list with changes for the disk is flushed to the disk database and the list is cleared.I have found this works well if I also set the writing more to WOL(Write Ahead Logging). This method can stand about 100-300 updates a second if I update memory every 100 updates and the disk counter is set to update every 5 memory updates. You should probobly choose binary, sense, unless you have faults in your data sources, would be most logical
Collecting, storing, and retrieving large amounts of numeric data