High concurrency counters without sharding

Our solution has three major components:

  1. A ‘permanent’ count, stored in the datastore.
  2. A ‘current’ count, stored in memcache.
  3. A task queue task that updates the datastore with the total from memcache.