CockroachDB and Analytic Workloads

CockroachDB and Analytic Workloads

Although CockroachDB lands firmly in the OLTP space its perfectly acceptable to run more analytic type workloads against your cluster


CockroachDB is primarily designed as an OLTP (Online Transaction Processing) database, which means it is optimised for handling high transaction volumes and low-latency queries. Its distributed architecture and support for SQL transactions make it perfectly suited for handling transactional workloads, such as e-commerce applications, gaming platforms, financial services, and other real-time systems.

That being said, CockroachDB also supports OLAP (Online Analytical Processing) capabilities, such as window functions, grouping functions, and aggregate functions. These capabilities can be used for  data analysis and reporting against the data stored in your cluster.

CockroachDB does have some features that make it well-suited for certain analytical use cases. For example, its support for distributed SQL and ACID transactions can make it easier to maintain data consistency and accuracy in analytical workflows that involve frequent data updates or modifications.

In recent releases, CockroachDB has been added features that make it even more suitable for analytical use cases, such as the ability to perform distributed joins and a new distributed SQL execution engine that supports advanced query optimisation. These features can make it easier to use CockroachDB for your analytics workloads, however please be aware it may still not be the best option for all OLAP use cases.

In summary, while CockroachDB is primarily designed as an OLTP database but it does support OLAP capabilities and is continuing to add more features to support your analytics.


Supported Analytic functions

CockroachDB currently supports a variety of analytic functions that can be used for data analysis and reporting. Some of the most commonly used analytic functions in CockroachDB include:

  1. Window Functions: CockroachDB supports several window functions, including ROW_NUMBER, RANK, DENSE_RANK, and NTILE. These functions can be used to perform ranking and aggregation operations over a set of rows, allowing for more complex calculations than traditional SQL aggregate functions.
  2. Aggregate Functions: CockroachDB supports a variety of standard SQL aggregate functions, including SUM, COUNT, AVG, MIN, and MAX. These functions can be used to perform basic calculations over a set of rows in a table or view.
  3. Grouping Functions: CockroachDB supports the GROUP BY clause, which can be used to group data based on one or more columns. This allows for aggregate calculations to be performed on subsets of data within a table or view.
  4. Ranking Functions: CockroachDB supports several ranking functions, including RANK, DENSE_RANK, and ROW_NUMBER. These functions can be used to assign a rank or row number to each row in a result set based on a specified column or set of columns.
  5. Window Aggregate Functions: CockroachDB supports several window aggregate functions, including SUM, COUNT, AVG, MIN, and MAX. These functions can be used to calculate aggregate values over a window of rows defined by a specified set of columns.
  6. String Functions: CockroachDB supports several string functions, including SUBSTRING, CONCAT, and LOWER/UPPER. These functions can be used to manipulate and extract data from string values.

Lets look at a simple example

This is an example of an OLAP query in CockroachDB that calculates the average order value for each month in a sales dataset:

In this example, we're using the DATE_TRUNC function to group the sales data by month, and then using the AVG function to calculate the average total order amount for each month. The GROUP BY clause is used to group the data by month.

As mentioned above, CockroachDB's support for window functions, grouping functions, and aggregate functions make it possible to perform more complex OLAP queries as well, depending on the specific requirements of the use case.


Overall, CockroachDB's support for analytic functions is comparable to other relational databases, and should be sufficient for most common analytic use cases. However, it's worth noting that more advanced analytics and machine learning tasks may require specialised tools or platforms.

Thanks for reading