On 29/03/2016 10:12, Galder ZamarreƱo wrote:
Good start but rather than coming out with a general design for a
counter, I'd try to start coming out with functionality needed for the most commonly
use cases for counters, e.g.
e.g. if you're counting number of visits to your website, you only need an
incrementing counter (and maybe a reset to be called at the end of the
day/week/month/year?) but you'll never decrement, precision not hugely important?
Could you assume you always increment by 1? It might be more efficient to increment by
N...
e.g. if you're counting number of users logged in at one point to
your website, then you need a counter that both increments and decrements, precision not
hugely important? You probably don't want reset operation? Moreover, could you assume
you always increment/decrement by 1?
You want an "Adder" for both of these cases [1].
e.g. if using a counter to generate a unique identifier that always
increases, you need only increment but precision must be guaranteed, so after increasing
and retrieving an old value can't be retrieved. You probably don't want reset
operation? You can probably assume that increment is only by 1.
This is a sequence, and, even in this case, there are two possible variants:
- one where you just need uniqueness but monotonic increment is not
essential (nodes can retrieve preallocated ranges of ids on demand).
- one which is fully monotonic
Tristan
[1]
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/Lon...
--
Tristan Tarrant
Infinispan Lead
JBoss, a division of Red Hat