When to build a separate reporting database?

In general, the more mission critical the transactional app and the more sophisticated the reporting requirements, the more splitting makes sense.

  1. When transaction performance is critical.
  2. When it’s hard to get a maintenance window on the transactional app.
  3. If reporting needs to correlate results not only from this app, but from other application silos.
  4. If the reports need to support trending or other types of reporting that are best suited for a star schema/Business Intelligence environment.
  5. If the reports are long running.
  6. If the transactional app is on an expensive hardware resource (cluster, mainframe, etc.)
  7. If you need to do data cleansing/extract-transform-load operations on the transactional data (e.g., state names to canonical state abbreviations).

It adds non-trivial complexity, so imo, there has to be a good reason to split.

Leave a Comment