Understanding Intermediate Data Architecture

Evaluate workload access patterns and operational constraints to choose between relational, document, and columnar analytical data paradigms.

11 min

Activities: 0 of 2

Data Layouts and the Access Pattern Match

Choosing a data platform is fundamentally an exercise in matching your software's read and write access patterns to how an engine organises bytes on disk and in memory.

When an application reads an entity, it requests specific disk pages into the engine buffer cache. If you select a paradigm whose on-disk layout conflicts with your querying profile, your hardware spends most of its I/O budget retrieving irrelevant fields or traversing multi-page references:

  • Row-oriented Relational (RDBMS): Stores records contiguously (Row 1: [ID, Name, Balance], Row 2: [ID, Name, Balance]). Ideal for atomic single-row mutations and index-driven point lookups.
  • Document (Aggregate-oriented NoSQL): Stores self-contained hierarchies (JSON/BSON trees) as single contiguous records. Ideal when an entity and all its nested children are consistently created, read, and updated together.
  • Column-oriented Analytical (OLAP): Stores values by column across records (All IDs, then all Names, then all Balances). Ideal for scanning millions of rows across only two or three target fields without loading entire records into memory.

Paradigm Mechanics & Workload Trade-offs

Optimal For: Strict relational integrity, cross-entity transactional updates, and unpredictable ad-hoc queries.

Mechanical Trade-off: Updates to a single row touch only one memory block, preserving low-latency random writes. However, aggregating a single metric (e.g. SUM(total_amount)) across 100,000,000 rows requires the storage engine to pull entire row tuples off disk into memory, causing massive I/O bloat.

Real-World Cases: Misaligned Access Patterns

Case 1: The Billing System Document Trap

A SaaS fintech startup stored subscription invoices in a document database. Each invoice contained customer details, historical line items, payment events, and refund metadata. Point reads inside the user portal were sub-millisecond. However, when the accounting team attempted month-end tax reconciliation (aggregating VAT by country across 4 million invoices), the query timed out.

Because the engine had to load full JSON documents into RAM just to parse a single numeric field (tax_rate), memory was exhausted within seconds. The team had to extract tax ledgers into an immutable relational table with secondary indexes to restore operational stability.

Case 2: The E-Commerce Analytics Chokehold

An e-commerce marketplace ran dashboard reporting directly against their primary OLTP PostgreSQL production replica. Whenever marketing ran reports calculating cohort lifetime value across millions of checkout events, the disk subsystem queued hundreds of thousands of random page reads, thrashing the shared buffer pool and pushing customer checkout latencies from 35ms to over 2.4s.

Separating the analytical workload into an event-streamed columnar engine (ClickHouse/Snowflake) isolated transactional caches and reduced query time from 42 seconds to 120 milliseconds.

Diagnosing Common Architectural Failures

Match Workload Characteristics to Engine Paradigms

Pair the given access pattern and operational requirement with the most appropriate database paradigm.

  • Telemetry metrics: 50,000 appends/sec; daily queries compute P99 percentiles across 500M rows.
  • Core Banking: Dual-entry ledger requiring strict multi-table atomic ACID guarantees and foreign key validations.
  • Content Management: Rich media articles with polymorphic blocks, retrieved in full by URL slug for public display.
  • User Session Cache: Ephemeral authentication tokens expiring in 15 minutes with sub-millisecond key-based lookup.

Selection Heuristic: The Decision Triangle

When selecting your paradigm, evaluate three primary architectural axes:

  1. Write Topology: Are writes atomic mutations to single isolated entities (Document), multi-entity transactional agreements (Relational), or high-throughput batch appends (Analytical)?
  2. Read Granularity: Do reads require the whole object (Row/Document) or aggregate projections over millions of isolated fields (Columnar)?
  3. Schema Stability: Are schemas uniform and constrained across all tenants, or do objects vary dynamically per domain entity?

What would you do?

You are technical lead for a logistics SaaS. The product team is building an 'Order Tracking & Audit Engine'. Requirements: 1. 10,000 delivery drivers emit GPS coordinates every 10 seconds (86.4M records/day). 2. Dispatchers occasionally look up the last known location of a single driver by Driver_ID. 3. Regional directors run ad-hoc queries computing average route turnaround times, idle delays, and fuel efficiency metrics across entire quarters (billions of records). How do you architect the persistent storage layer for this feature?
1 of 28

Checking your enrolment…