m@ksim.pro
Back to all posts
Data 3 min read

Analytics databases and operational databases are different tools

Why one database cannot do both transactions and analytics well - and what to do about it.

When a company faces its first analytical task - "let's look at quarterly sales by region" - the typical response is to run it against the same database the operational system lives on. That is understandable: the data is there, the developers know the schema, and building additional infrastructure seems unnecessary.

After a while, analytical queries start slowing down, the operational system complains about the load, and analysts wait several minutes for results. The first reaction is to add indexes or upgrade the server. That helps for a while.

The problem is not capacity. The problem is that two classes of work are structured in fundamentally different ways.

What the difference is

Operational systems - CRM, ERP, accounting systems - work with individual records. Add an order, update a status, find a customer by ID. Queries process a few rows, response speed matters, and data consistency at the moment of the operation is essential. These systems are optimised for transactions.

Analytical tasks are different. Look at revenue across all customers for a year, compare metrics across periods, aggregate millions of rows. Queries read large volumes of data, the speed of a single transaction does not matter, but the speed of processing large tables in full does.

These two classes of load are poorly compatible on the same database - especially as volumes grow. Optimising for one worsens the other.

What the right answer looks like

The standard solution is to separate the stores. The operational system stays on its own transaction-optimised database. A separate data warehouse is created for analytics, receives data from operational systems through a load process, and is optimised for large analytical queries.

This does not mean immediately buying a large data warehouse platform. For many companies at an early stage, a read replica or a relatively small separate analytical server is enough. The main thing is physical separation of load.

What this changes for the business

The first effect is stability for the operational system. Analytical queries stop competing with transactions. Working in the CRM does not slow down because someone is building a two-year report at the same time.

The second effect is freedom for analysts. On a separate store, they can run complex queries without risk of taking down the operational system. History can be kept at the volume needed, not limited by the size of the transaction database.

The third effect is the ability to combine data from multiple systems. The operational database contains its own data. The analytical warehouse can contain data from the CRM, ERP, billing, and external sources - side by side, in one place, in a consistent format.

When to make the split

A few signs that it is time to think about a separate analytical store:

  1. Analytical queries take minutes and interfere with the operational system's work.
  2. Analysts cannot access data from several years back - history is not kept, or kept poorly.
  3. Answering a business question requires manually assembling data from several exports.
  4. Developers are afraid to give analysts access to the operational database - too risky.
  5. Data volume is growing, and the two- to three-year forecast looks uncomfortable.

Separating stores is not an architectural whim. It is a practical response to the fact that different tasks require different tools.

Back to all posts
Contact

If this resonated, write to me. I reply personally.

WhatsApp