GrabDaniel TaiExplainer
The evolution of Grab's machine learning feature store
Summary
Grab describes how it evolved its machine learning feature store as increasingly complex models began requiring high-cardinality keys and high-dimensional data. It replaced its initial Amphawa approach with feature tables: data-lake tables whose contents are atomically ingested into serving storage, with emphasis on consistency and reproducibility. The workflow stores feature tables and version-control metadata as Parquet objects in Amazon S3, validates schemas, loads data through reverse ETL into Aurora Postgres, and warms new tables through shadow reads before switching. The redesign supports contextual retrieval, atomic collection-wide updates, and isolation between reading and writing capacity; its SDK remains a thin database-driver wrapper that translates queries to SQL. Grab also chose decentralised deployments for version flexibility, rollout strategies, noisy-neighbor mitigation, and improved caching, concluding that Amazon Aurora for Postgres provides a robust, scalable, cost-effective foundation.
Context
Grab’s earlier Amphawa feature store faced challenges as machine learning systems grew more complex, including high-cardinality feature keys, high-dimensional data, contextual retrieval needs, collection-wide atomic updates, and competition between reading and writing capacity. Gradual ingestion also exposed consumers to mixed old and new data, increasing compatibility and maintenance complexity.
Approach / What changed
The new design uses user-managed feature tables backed by data-lake workflows. Tables and version-control metadata are stored as Parquet objects in Amazon S3, validated by a registry, and ingested into Aurora Postgres through reverse ETL. Shadow reads warm new tables before switching, while a thin SDK builds SQL queries. Deployments are decentralised within model-serving orchestrators.
Takeaways
Feature tables are ingested atomically, so feature changes become visible only after the entire operation succeeds, reducing compatibility concerns during model or data-version changes.
The ingestion workflow uses Amazon S3 for Parquet-based feature tables and metadata, then loads data into Aurora Postgres through a reverse ETL process with pre-ingestion validation and post-ingestion warm-up.
Decentralised data-serving deployments were selected because they support blue-green and rolling deployments, multiple coexisting versions, easier rollbacks, service isolation, and improved caching efficiency.
Source and freshness
- Source
- engineering.grab.com
- Published
- Added to Yomu
- Last updated
Summaries are generated from the original by a language model. Check the original before relying on it.
Keep reading
Related reading
The Good Stuff
Paid picks we use ourselves. Links carry a referral code — a subscription through one earns us a commission at no extra cost to you.
The best engineering reads, once a week
One useful email. Unsubscribe anytime.