Class LRUDictionary

java.lang.Object
org.apache.hadoop.hbase.io.util.LRUDictionary
All Implemented Interfaces:
Dictionary

@Private public class LRUDictionary extends Object implements Dictionary
WALDictionary using an LRU eviction algorithm. Uses a linked list running through a hashtable. Currently has max of 2^15 entries. Will start evicting if exceeds this number The maximum memory we expect this dictionary to take in the worst case is about: (2 ^ 15) * 5 (Regionname, Row key, CF, Column qual, table) * 100 bytes (these are some big names) = ~16MB. If you want to get silly, even at 1kb entries, it maxes out at 160 megabytes.
  • Field Details

  • Constructor Details

  • Method Details

    • getEntry

      public byte[] getEntry(short idx)
      Description copied from interface: Dictionary
      Gets an entry from the dictionary.
      Specified by:
      getEntry in interface Dictionary
      Parameters:
      idx - index of the entry
      Returns:
      the entry, or null if non existent
    • init

      public void init(int initialSize)
      Specified by:
      init in interface Dictionary
    • findEntry

      public short findEntry(byte[] data, int offset, int length)
      Description copied from interface: Dictionary
      Finds the index of an entry. If no entry found, we add it.
      Specified by:
      findEntry in interface Dictionary
      Parameters:
      data - the byte array that we're looking up
      offset - Offset into data to add to Dictionary.
      length - Length beyond offset that comprises entry; must be > 0.
      Returns:
      the index of the entry, or Dictionary.NOT_IN_DICTIONARY if not found
    • addEntry

      public short addEntry(byte[] data, int offset, int length)
      Description copied from interface: Dictionary
      Adds an entry to the dictionary. Be careful using this method. It will add an entry to the dictionary even if it already has an entry for the same data. Call {Dictionary.findEntry(byte[], int, int)} to add without duplicating dictionary entries.
      Specified by:
      addEntry in interface Dictionary
      Parameters:
      data - the entry to add
      offset - Offset into data to add to Dictionary.
      length - Length beyond offset that comprises entry; must be > 0.
      Returns:
      the index of the entry
    • addEntryInternal

      private short addEntryInternal(byte[] data, int offset, int length, boolean copy)
    • clear

      public void clear()
      Description copied from interface: Dictionary
      Flushes the dictionary, empties all values.
      Specified by:
      clear in interface Dictionary
    • findEntry

      public short findEntry(ByteBuffer data, int offset, int length)
      Description copied from interface: Dictionary
      Finds the index of an entry. If no entry found, we add it.
      Specified by:
      findEntry in interface Dictionary
      Parameters:
      data - the ByteBuffer that we're looking up
      offset - Offset into data to add to Dictionary.
      length - Length beyond offset that comprises entry; must be > 0.
      Returns:
      the index of the entry, or Dictionary.NOT_IN_DICTIONARY if not found