Ho N bucket. Ho degli utenti M Ogni utente può acquistare ovunque tra 1 e N biglietti per una lotteria imminente.
Vorrei distribuire i biglietti più o meno uniformemente tra i bucket, con il vincolo addizionale che un utente non può avere più di un ticket nello stesso bucket.
Sarebbe anche carino se quando ho aggiunto o rimosso i bucket, non dovevo ridistribuire una grande percentuale dei ticket.
Questo è in qualche modo simile a un problema di hash coerente . Potrei fare hash(userId+userTicketNumber)
e mettere quell'hash sull'anello. Tuttavia, non ho alcuna garanzia che i biglietti dell'utente vengano messi in un set unico di bucket.
Una soluzione sarebbe quella di allocare l'utente 1, il ticket 1 al bucket 1, quindi incrementare il numero del bucket e il numero del ticket. Quando l'utente ha esaurito i ticket, incrementa il numero del bucket e passa all'utente 2. Quando finiamo i bucket, ricominciamo dal bucket 1, e così via e così via fino a quando non vengono allocati tutti i ticket. Sfortunatamente questa procedura porterebbe a un sacco di riallocazione quando ho aggiunto o rimosso i bucket.
Ho provato a cercare varianti per il problema dell'anello hash coerente, ma non trovo nulla. Sono sicuro che questo problema è stato risolto prima - sai dove si trova la soluzione?