Concourse is a schemaless and distributed version control database with automatic indexing, acid transactions and full-text search. Concourse provides a more intuitive approach to data management that is easy to deploy, access and scale with minimal tuning while also maintaining the referential integrity and ACID characteristics of traditional database systems.
The Concourse data model is lightweight and flexible. Unlike other databases, Concourse is completely schemaless and does not hold data in tables or collections. Instead, Concourse is simply a distributed graph of records. Each record has multiple keys. And each key has one or more distinct values. Like any graph, you can link records to one another. And the structure of one record does not affect the structure of another.
import org.cinchapi.concourse
// Establish connection to Concourse Server
Concourse concourse = Concourse.connect();
// Insert a value for the "name" key in record 1
concourse.set("name", "Jeff Nelson", 1);
// Append an additional value for the "name" key in record 1
concourse.add("name", "John Doe", 1);
// Remove a value for the "name" key in record 1
concourse.remove("name", "Jeff Nelson", 1)
// Get the oldest value for the "name" key in record 1
concourse.get("name", 1);
// Fetch all the values for the "name" key in record 1
concourse.fetch("name", 1);
// Find all the records that have a value of "Jeff Nelson" for the "name" key
concourse.find("name", Operator.EQUALS, "Jeff Nelson");
try {
// Transfer $50 from acct1 to acct2
concourse.stage(); //start transaction
concourse.set("balance", concourse.get("balance", acct1) - 50), acct1);
concourse.set("balance", concourse.get("balance", acct2) + 50), acct2);
concourse.commit();
}
catch (TransactionException e) {
concourse.abort();
}
For more usage information please review the Concourse Guide and API documentation.
Concourse immediately writes all data to disk, but also keeps recently written and read content in memory. Since memory operations are faster, having more on hand is great, but you can operate Concourse safely with a minimum 256 MB heap.
Concourse is only supported on Linux and Mac OS X operating systems. Things should also work on Windows, but we can't make any guarantees.
Concourse runs on Java 1.7.
This is version 0.5.0 of Concourse.
Concourse will be maintained under the Semantic Versioning
guidelines such that release versions will be formatted as <major>.<minor>.<patch>
where
- breaking backward compatibility bumps the major,
- new additions while maintaining backward compatibility bumps the minor, and
- bug fixes or miscellaneous changes bumps the patch.
This repository contains several modules that form the concourse-core.
- The concourse project contains the core API, which is the foundation for everything in Concourse. This API is public and should be used in third-party applications to interact with Concourse.
- The concourse-server project contains all the server-side logic for data storage and retrieval. You should never include this code in a third-party application, but should install the concourse-server distribution and interact with it using the concourse api.
- The concourse-shell project contains the code for the Concourse Action SHell (CaSH), which is shipped with concourse-server.
- The concourse-integration-tests project contains long running end-to-end tests that should be run separately from the build process.
Read the contributing guidelines to learn how to get involved in the community. We value and welcome constructive contributions from anyone regardless of skill level :)
- Jeff Nelson
Copyright © 2013-2014 Jeff Nelson, Cinchapi Software Collective.
Concourse is released under the MIT License. For more information see LICENSE, which is included with this package.