QuasarDB is a high-performance, distributed, column-oriented database with native time series support. Transfers, computations, and aggregations are so fast that analysts can work interactively on their data, regardless of the amount stored.
The origins of this can be traced back to a project started by the founder in 2009 when he thought of applying the techniques that he learned from kernel programming to a database. The preliminary performance results were really surprising with the performance of the prototype beating all the other key-value stores that could be tested at that time.
The project kept growing into a much bigger one with more features until it evolved into the current day database that is quasardb.
If two transactions attempt to write to the same entry, the first transaction to operate on the entry wins and the other transaction is canceled. When a transaction writes to an entry, other transactions may access the previous value of the entry.
Transactions in quasardb are snapshot based and provide repeatable reads.
quasardb supports a rich set of APIs in various languages. Currently, APIs are supported in C, C++, Go, Hadoop integration, Java, .NET, Node.js, PHP, Python, REST API, Spark connector. The timeseries data can be searched using a syntax similar to a regular SQL query:
Entries are often kept resident in a write cache so the daemon can rapidly serve a large amount of simultaneous requests. When a user adds or updates an entry on the cluster the entry’s value may not be synced to the disk immediately. However, quasardb guarantees the data is consistent at all times, even in case of hardware or software failure.
QuasarDB is a column-oriented time series database. The time series are column oriented and can have an arbitrary number of columns, each column has an unique name.
quasardb interface is not in SQL and so it does not support stored procedures.
The data is stored on multiple nodes that are linked together into a cluster. This is a peer-to-peer distributed hash table based on Chord in which the nodes self-organize to share data and handle client requests.