Class ConsistentHashMap<P>

  • Type Parameters:
    P - The type of partition object.

    public final class ConsistentHashMap<P>
    extends Object
    An implementation of "consistent hashing" supporting per-partition weighting. This implementation is thread safe and allows partitions to be added and removed during use.

    This implementation maps partitions to one or more points on a circle ranging from Integer.MIN_VALUE to Integer.MAX_VALUE. The number of points per partition is dictated by the partition's weight. A partition with a weight which is higher than another partition will receive a proportionally higher load.

    See Also:
    Consistent Hashing and Random Trees, Web Caching with Consistent Hashing
    • Method Detail

      • newMurmur3ConsistentHashMap

        public static <T> ConsistentHashMap<T> newMurmur3ConsistentHashMap()
        Creates a new consistent hash map which will hash keys using Murmur3.
        Type Parameters:
        T - The type of partition object.
        Returns:
        A new consistent hash map which will hash keys using Murmur3.
      • put

        public ConsistentHashMap<P> put​(String partitionId,
                                        P partition)
        Puts a partition into this consistent hash map using the default weight which is sufficiently high to ensure a reasonably uniform distribution among all partitions having the same weight.
        Parameters:
        partitionId - The partition ID.
        partition - The partition.
        Returns:
        This consistent hash map.
      • put

        public ConsistentHashMap<P> put​(String partitionId,
                                        P partition,
                                        int weight)
        Puts a partition into this consistent hash map using the specified weight. If all partitions have the same weight then they will each receive a similar amount of load. A partition having a weight which is twice that of another will receive twice the load. Weight values should generally be great than 200 in order to minimize the risk of unexpected imbalances due to the way in which logical partitions are mapped to real partitions.
        Parameters:
        partitionId - The partition ID.
        partition - The partition.
        weight - The partition's weight, which should typically be over 200 and never negative.
        Returns:
        This consistent hash map.
      • putAll

        public ConsistentHashMap<P> putAll​(Map<String,​P> map)
        Copies all the partitions from the specified map to this consistent hash map..
        Parameters:
        map - The map containing the partitions to add.
        Returns:
        This consistent hash map.
      • remove

        public ConsistentHashMap<P> remove​(String partitionId)
        Removes the partition that was previously added using the provided partition ID.
        Parameters:
        partitionId - The partition ID.
        Returns:
        This consistent hash map.