= Distributed ID Generator

== Overview

The distributed atomic sequence provided by the `IgniteCacheAtomicSequence` interface is similar to the distributed atomic long,
but its value can only go up. It also supports reserving a range of values to avoid costly network trips or cluster updates
every time a sequence must provide a next value. That is, when you perform `incrementAndGet()` (or any other atomic operation)
on an atomic sequence, the data structure reserves ahead a range of values, which are guaranteed to be unique across the
cluster for this sequence instance.

As a result, the atomic sequence is a suitable and efficient data structure for the implementation of a
distributed ID generator. For instance, such a generator can be used to produce unique primary keys across the whole cluster.

Here is an example of how atomic sequence can be created:

[tabs]
--
tab:Java[]
[source, java]
----
Ignite ignite = Ignition.ignite();

IgniteAtomicSequence seq = ignite.atomicSequence(
    "seqName", // Sequence name.
    0,       // Initial value for sequence.
    true     // Create if it does not exist.
);
----
--

Below is a simple usage example:

[tabs]
--
tab:Java[]
[source, java]
----
Ignite ignite = Ignition.ignite();

// Initialize atomic sequence.
final IgniteAtomicSequence seq = ignite.atomicSequence("seqName", 0, true);

// Increment atomic sequence.
for (int i = 0; i < 20; i++) {
  long currentValue = seq.get();
  long newValue = seq.incrementAndGet();

  ...
}
----
--

== Sequence Reserve Size

The key parameter of `IgniteAtomicSequence` is `atomicSequenceReserveSize` which is the number of sequence values reserved
per node. When a node tries to obtain an instance of `IgniteAtomicSequence`, a number of sequence values will be reserved
for that node and consequent increments of sequence will happen locally without communication with other nodes, until
the next reservation has to be made.

The default value for `atomicSequenceReserveSize` is `1000`. This default setting can be changed by modifying the
`atomicSequenceReserveSize` property of `AtomicConfiguration`.

