I don't like KDB+/q.
For KDB+ experts, I am not picking a fight.
The following is just my own understanding on KDB+ and TimeSeries Database.
You're warmly welcome to correct me if anything wrong in your eyes :).
First of all, during my near one year's KDB+/q development experience, I never ever find a paper based benchmark result indicating KDB+/q significantly out performs other storage system in time.
By storage system, I don't limit the scope to disk based RDBMS.
So I don't know why everybody in quant finance is talking about KDB+ and impressed by its efficiency without data backing their points.
Second, I once talked with an Oracle Certificated DBA about KDB+.
From my description, the first word he came up is an in-memory cache not even a full fledge database.
Maybe he is right to some extent, isn't he?
Next is the so-called TimeSeries.
More than one manager advocating KDB+ from different positions and companies talked to me KDB+ is a TimeSeries Database.
However, I don't think TimeSeries is a feature of KDB+, whose real feature is the column oriented storage engine.
That is to say with a column oriented storage engine, that KDB+ is friendly to store TimeSeries data.
While in these days, column oriented storage engine does not belong to KDB+ exclusive.
For traditional RDBMS, like MySQL, you can also find corresponding column storage engines in the open source communities.
The last and the most important, I want to talk about the developer friendliness.
KDB+ is distributed along with a DSL, which is q.
q is very developer unfriendly.
When an error encountered, it just raise the error type, without any line information for you to anchor, which increase the difficulty to bug fixing and code maintenance.
Alternatives to KDB+ I can come up with:
- to give the system column oriented storage, a traditional K-V store
works, even a column storage backed RDBMS;
- for the in-memory feature, a lot of open source implementation of in-memory cache,
like redis, memcached, etc.
The key feature for the alternative, I think, is that the API is written in standard C/C++.
You could have a lot of utilities to ease your development.