HTTP Counters
Riak counters are a CRDT (convergent replicated data type) that (eventually) converge to the correct total. You merely increment the counter with some integer, and any potential conflicts will be automatically resolved by Riak.
Setup
Riak counters can only be used if the bucket has the allow_mult
property
set to true
.
curl -XPUT localhost:8098/buckets/BUCKET/props \
-H "Content-Type: application/json" \
-d "{\"props\" : {\"allow_mult\": true}}"
If you attempt to use counters without setting the above, you’ll get this message:
Counters require bucket property 'allow_mult=true'
Request
To insert just POST an integer value using the /counters
resource. This will
increment that keyed value by the given amount.
POST /buckets/BUCKET/counters/KEY
To receive the current value is a GET using /counters
GET /buckets/BUCKET/counters/KEY
Response
The regular POST/PUT (HTTP Store Object) and GET (HTTP Fetch Object) responses apply here.
Caveats: Counters have no support for Secondary Indexes (2i), Links or Custom HTTP Metadata.
Example
The body must be an integer (positive or negative).
curl -XPOST http://localhost:8098/buckets/my_bucket/counters/my_key -d "1"
curl http://localhost:8098/buckets/my_bucket/counters/my_key
1
curl -XPOST http://localhost:8098/buckets/my_bucket/counters/my_key -d "100"
curl http://localhost:8098/buckets/my_bucket/counters/my_key
101
curl -XPOST http://localhost:8098/buckets/my_bucket/counters/my_key -d "-1"
100