In general, the more mission critical the transactional app and the more sophisticated the reporting requirements, the more splitting makes sense.
- When transaction performance is critical.
- When it's hard to get a maintenance window on the transactional app.
- If reporting needs to correlate results not only from this app, but from other application silos.
- If the reports need to support trending or other types of reporting that are best suited for a star schema/Business Intelligence environment.
- If the reports are long running.
- If the transactional app is on an expensive hardware resource (cluster, mainframe, etc.)
- 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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…