Problem Statement: One Platform, Two Very Different Workloads
Frames geospatial analytics as a dual-workload system: low-latency spatial serving plus heavy analytical spatial joins over time.
Problem statement
Design a geospatial analytics platform that ingests location-bearing data (driver pings, device GPS traces, store and POI coordinates, delivery events, asset telemetry), maintains spatial and temporal indexes over it, and serves two fundamentally different consumers. The first is an online serving path: queries like all events within X km in the last Y hours, bounding-box fetches for a map viewport, polygon containment for geofenced analytics, and nearest-neighbor lookups, each with a tight latency budget. The second is an analytical path: large spatiotemporal scans and spatial joins (points-in-polygon grouped by region, density grids, origin-destination matrices, dwell-time aggregation) executed by a distributed query engine over billions of rows.
The distinctive engineering tension is that these two paths have opposite access patterns. Serving wants small, index-driven, millisecond reads over hot data. Analytics wants enormous sequential scans over cold data with columnar layouts and space-filling-curve data skipping. A single storage engine rarely serves both well, so the architecture must branch the write path: one event fans out to a live spatial index, a stream aggregator, and a durable lake that is later compacted into partitioned columnar files.
Why spatial is special
Latitude and longitude are two correlated dimensions with no total ordering that preserves two-dimensional locality. Range queries are two-dimensional, so a naive B-tree on latitude alone cannot prune longitude. The platform therefore linearizes space using structures that preserve locality: geohash prefixes, H3 hexagonal cells, S2 cell unions, R-tree bounding boxes, or Z-order interleaved keys. Every downstream decision (partitioning, caching, join strategy, hotspot mitigation) derives from which linearization was chosen and at which resolution.
The time dimension compounds this. Spatiotemporal queries filter by a space window AND a time window, so keys must interleave or layer space and time (for example geohash prefix plus time bucket, or a Z-order curve over cell and epoch). Retention, tiering, and compaction all become two-dimensional lifecycle problems.
The four planes of the design
- Ingestion plane: validated, schema-registered, deduplicated intake of points, lines, and polygons from batch and streaming producers.
- Indexing plane: maintenance of live spatial indexes (geohash/BKD/Redis GEO), reference geometry stores (PostGIS-style), and cell aggregates (H3/S2).
- Serving plane: low-latency radius, bbox, polygon, and KNN queries with candidate-generation plus exact-verification two-phase execution.
- Analytics plane: distributed SQL with spatial predicates (Presto/Trino, BigQuery GIS, Snowflake, Spark with Sedona) over a compacted lake, plus geofenced aggregation dashboards.
A strong interview answer keeps these planes separate, states the consistency and freshness contract of each, and quantifies everything: events per second, bytes per event, index fan-out, query latency percentiles, and retention tiers. Unless tied to a published figure, every number in this answer is an explicitly stated design assumption.
Key Highlights
- •Geospatial analytics is two workloads: millisecond spatial serving and billion-row analytical spatial joins.
- •Space has no locality-preserving total order; the platform must choose a linearization (geohash, H3, S2, R-tree, Z-order).
- •One write fans out to live index, stream aggregation, and compacted columnar lake.
- •Spatiotemporal keys interleave space and time; retention and tiering are two-dimensional.
- •Four planes: ingestion, indexing, serving, analytics, each with its own consistency contract.
Section Rescue Kit
Buzzwords to use:
Safe statements:
- "Let me separate the millisecond serving path from the scan-heavy analytical path before choosing stores."
- "The first decision is how we linearize two-dimensional space while preserving locality."