ConcourseDB is a distributed self-tuning database with automatic indexing, version control and ACID transactions. ConcourseDB provides a more intuitive approach to data management that is easy to deploy, access and scale while maintaining the strong consistency of traditional database systems.
Concourse supports cross-record transactions that are fully ACID compliant: all operations succeed or fail together; writes are visible to all readers only after being successfully committed; serializable isolation is used to prevent dirty reads, non-repeatable reads and phantom reads; and committed transactions are immediately stored to disk so they persist in the event of power loss, crash or error
Concourse automatically and efficiently tracks revisions to your data. Of course this means that you can easily audit changes and revert to previous states without downtime; but it also means that you have the power to query and fetch data from any point in the past. Version control in Concourse makes it possible to build applications that know what was known when and can analyze real-time changes over time.
You no longer need to plan queries in advance. Concourse automatically indexes everything in both logical and sorted order–using a buffered storage system to ensure that writes are fast–so you can quickly fetch and query any key at any time. Concourse fully supports ad-hoc range and predicate queries and automatically caches frequently requested data for optimal performance.
Scalability and Fault Tolerance
Concourse can be distributed across many different servers on commodity hardware to increase read and write throughput. Distributed data is automatically partitioned and replicated to ensure that the system can withstand arbitrary failure–all while maintaining ACID strong consistency and optimistic availability. So no need to guess when your data will eventually be accurate–when distributed Concourse responds to a query, you can trust the results immediately.
Simple Data Model
The Concourse data model is lightweight and flexible–it supports any kind of data at very large scales. Data about each person, place or thing is held in a record, which is simply a collection of key pairs that are together identified by a unique primary key. A key can map to multiple distinct values, even if those values have different types. And speaking of types, all data within Concourse is dynamically typed–so yes, it really is simple.
Since Concourse makes very few assumptions about data, it integrates with your application seamlessly and never needs a translator (goodbye object-relational impedance mismatch)! You never have to declare any structure up front–no schema, no tables, no indexes..nothing. Concourse dynamically adapts to your application so that you can focus on building value in new places without having to drag the database along.
Full Text Search
Unstructured searches are as essential to an application’s liveliness as structures queries. That’s why Concourse automatically indexes text data–without diminishing write performance–so you can perform substring searches in real time as soon as data is stored. Indexes are updated on the fly, so searches are always accurate as soon as you make modifications or add new data.
The people, places and things in your data are all connected. So Concourse allows you to model those relationships with enforced referential integrity and also provides a built-in interface to perform analytical graph queries.