I'm trying to figure how to approach with generating unique integer with 8 digits in java. The biggest problem is that it gives you a limited permutation, and also the clustered env. Any suggestion is welcome.
Regards
I'm trying to figure how to approach with generating unique integer with 8 digits in java. The biggest problem is that it gives you a limited permutation, and also the clustered env. Any suggestion is welcome.
Regards
 
    
        int[] result = new Random().ints(10_000_000, 100_000_000)
            .distinct()
            .limit(8)
            .toArray();
8 digits starts with 10_000_000 upto inclusive 99_999_999. The large range means that duplicates are rear, so the internal looping will rarely be idle, have conflicting duplicates.
Clustered usage: easiest is to use a database.
 
    
    If you only need a limited number of values, you could try Random:
byte[] rnd = new byte[1];
Random rndgen = new Random():
for(...) {
    rndgen.nexbytes(rnd);
    ...
}
But as one byte can only hold 256 different values the collision risk if high.
If you have one single emitter, just use the natural sequence
boolean first = true;
byte i = 0;
for(;;) {
    if(i == 0) {
        if (first):
            first = false;
        }
        else {
            break;
        }
    }
    // use i
    ...
    i +== 1;
}
If you have a limited number of emitters, give each a subrange. For example for 4 nodes, each node will have a sequence of 64 values.
On a more complex use case, the only possible way is to dedicate a master that will manage the sequence 0-255: each node asks it for next value.
