Quote from Big:
As far as storing Time series with an open source technology that works with C#, I would personally go with db4o (http://www.db4o.com/) as it has proven many times to be very reliable, high performance, easy to use, support queries and is object oriented (ie you just save objects in it).
Wow. Big. That sounds like a great suggestion to consider. It so happens, I used an OODBMS in a past life (C++) called ObjectStore. That was on a real-time financial system and, as you say, simply storing objects produced screamingly fast performance.
In fact, that's what TickZoom does for speed but it doesn't have a query language for selecting tick ranges, etc. So it seems like a great suggestion to incorporate an OODBMS.
Since db40 is open source also, that makes it a potentially great partner.
Right now in TickZoom when you want to say zoom in and run tests only on one week of tick data in my database, it still takes 10 seconds to sequentially read to the right point. As the data grows that will become unacceptable.
Here's a potential challenge to resolve with OODBMS.
One of the big issues I have found with writing and reading objects and especially ticks, are versioning of objects. Earlier, as the Tick class evolved with additional fields, like volume, and later the DOM. It orphaned past stored data.
So tick storage was refactored to support backwards version compatibility. That is, any new version of tick format still reads the old version and just extrapolates or zeroes out any new fields unavailable in that version.
We'll have to figure out how to do something similar in db40. To do it in TickZoom, I had to drop serialization and write and read the raw bytes.
The way it works now is when a programmer needs to add a field to the tick class, you increase the version number field. Then you add into the ReadData() and WriteData() methods to read and write those additional bytes only if the data version is >= the current version. Then you add what to use for the data for lower versions.
In that way, it's always possible to read older versions of data.
If you already know or have solved this issue please share your ideas.
Wayne