
7/24/2026
What this post added
This post details the migration of Grab's Counter Service storage to Aerospike. It describes the challenges with the original row-per-bucket model and the successful adoption of a map-based schema where all bucket counts for a single counter are collapsed into one record. It also outlines the phased migration approach for the reader service, including extracting storage code, introducing a storage facade with enum dispatch for runtime backend selection, and implementing shadow reads and gradual traffic splitting for safe cutover. The writer pipeline was updated to use Aerospike's atomic map operations for writes and explicit pruning for TTL management.