BLOCKS includes a Key Value Store (kvstore) with many builtin functions. Using the incrCounter function provides robust, distributed computing safe technique to keep an accurate count of any event: candidate or ballot votes, client or server analytics, or any metric that has to have an accurate counting metric from a distributed set of contributing endpoints (voters from many devices, for example).


Imagine if you were to do this in a traditional database. You might get a web request to count a vote. You would have to get the current count value from your database (locking that record - and therefore blocking other vote requests) increment the count, write the incremented value back to the database (and do this in a globally distributed environment - aka, multiple database instances). In other words, if 1000 voters all voted for the same performer (perhaps on a talent popular talent TV show) within a small time window (lets say < .25 seconds), and all these voters are distributed across every country around the globe. How would you implement this functionality in way that one vote increment doesn't overwrite other increments happening at the same time and then sync all the votes from multiple database instance located in different data centers around the world (POPs or points of presence)? The incrCounter will do all this for you, asynchronously, and accurately without overwriting other vote increments.


For more details, see the BLOCKS documentation on KV Store incrCoutner function.