Согласованное хеширование в реальном времениJAVA

Программисты JAVA общаются здесь
Anonymous
Согласованное хеширование в реальном времени

Сообщение Anonymous »

Я просмотрел множество руководств, статей и блогов, посвященных последовательному хешированию. Я понял концепцию и функциональное поведение. Но еще есть немало вопросов. Попробовал реализовать концепцию, как я понимаю.

Код: Выделить всё

public class ConsistentHashing {
private final TreeMap ring;
private final int numberOfReplicas;
private final MessageDigest md;

public ConsistentHashing(int numberOfReplicas) throws NoSuchAlgorithmException {
this.ring = new TreeMap();
this.numberOfReplicas = numberOfReplicas;
this.md = MessageDigest.getInstance("MD5");
}

public void addServer(String server) {
for (int i = 0; i < numberOfReplicas; i++) {
long hash = generateHash(server + i);
ring.put(hash, server);
}
}

public void removeServer(String server) {
for (int i = 0; i < numberOfReplicas; i++) {
long hash = generateHash(server + i);
ring.remove(hash);
}
}

public String getServer(String key) {
if (ring.isEmpty()) {
return null;
}
long hash = generateHash(key);
if (!ring.containsKey(hash)) {
SortedMap tailMap = ring.tailMap(hash);
hash = tailMap.isEmpty() ? ring.firstKey() : tailMap.firstKey();
}
return ring.get(hash);
}

private long generateHash(String key) {
md.reset();
md.update(key.getBytes());
byte[] digest = md.digest();
long hash = ((long) (digest[3] & 0xFF) 

Подробнее здесь: [url]https://stackoverflow.com/questions/78966865/consitent-hashing-in-real-time[/url]

Вернуться в «JAVA»