Class MVMapKVStore

java.lang.Object
io.permazen.kv.AbstractKVStore
io.permazen.kv.mvstore.MVMapKVStore
All Implemented Interfaces:
KVStore
Direct Known Subclasses:
MVMapSnapshot, MVStoreAtomicKVStore

public class MVMapKVStore extends AbstractKVStore
Straightforward KVStore view of an MVMap.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected final Logger
     
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    Default constructor.
     
    MVMapKVStore(org.h2.mvstore.MVMap<byte[],byte[]> mvmap)
    Constructor.
  • Method Summary

    Modifier and Type
    Method
    Description
    byte[]
    get(byte[] key)
    Get the value associated with the given key, if any.
    getAtLeast(byte[] minKey, byte[] maxKey)
    Get the key/value pair having the smallest key greater than or equal to the given minimum, if any.
    getAtMost(byte[] maxKey, byte[] minKey)
    Get the key/value pair having the largest key strictly less than the given maximum, if any.
    org.h2.mvstore.MVMap<byte[],byte[]>
    Get the underlying MVMap associated with this instance.
    getRange(byte[] minKey, byte[] maxKey, boolean reverse)
    Iterate the key/value pairs in the specified range.
    void
    put(byte[] key, byte[] value)
    Set the value associated with the given key.
    void
    remove(byte[] key)
    Remove the key/value pair with the given key, if it exists.
     

    Methods inherited from class io.permazen.kv.AbstractKVStore

    adjustCounter, decodeCounter, encodeCounter, removeRange

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

    Methods inherited from interface io.permazen.kv.KVStore

    apply, getRange, getRange, removeRange
  • Field Details

    • log

      protected final Logger log
  • Constructor Details

    • MVMapKVStore

      protected MVMapKVStore()
      Default constructor.

      If this constructor is used, this class must be subclassed and getMVMap() overridden to supply the delegate MVMap.

      Throws:
      IllegalArgumentException - if mvmap is null
    • MVMapKVStore

      public MVMapKVStore(org.h2.mvstore.MVMap<byte[],byte[]> mvmap)
      Constructor.
      Parameters:
      mvmap - the underlying MVMap to use
      Throws:
      IllegalArgumentException - if mvmap is null
  • Method Details

    • getMVMap

      public org.h2.mvstore.MVMap<byte[],byte[]> getMVMap()
      Get the underlying MVMap associated with this instance.

      The implementation in MVMapKVStore returns the MVMap passed to the constructor, if any. Subclasses that use this class' default constructor must override this method.

      Returns:
      underlying MVMap
    • get

      public byte[] get(byte[] key)
      Description copied from interface: KVStore
      Get the value associated with the given key, if any.

      Modifications to the returned byte[] array do not affect this instance.

      Specified by:
      get in interface KVStore
      Overrides:
      get in class AbstractKVStore
      Parameters:
      key - key
      Returns:
      value associated with key, or null if not found
    • getAtLeast

      public KVPair getAtLeast(byte[] minKey, byte[] maxKey)
      Description copied from interface: KVStore
      Get the key/value pair having the smallest key greater than or equal to the given minimum, if any.

      An optional (exclusive) maximum key may also be specified; if maxKey is null, there is no upper bound; if maxKey <= minKey, null is always returned.

      If keys starting with 0xff are not supported by this instance, and minKey starts with 0xff, then this method returns null.

      Modifications to the returned byte[] arrays do not affect this instance.

      Specified by:
      getAtLeast in interface KVStore
      Overrides:
      getAtLeast in class AbstractKVStore
      Parameters:
      minKey - minimum key (inclusive), or null for no minimum (get the smallest key)
      maxKey - maximum key (exclusive), or null for no maximum (no upper bound)
      Returns:
      smallest key/value pair with key >= minKey and key < maxKey, or null if none exists
    • getAtMost

      public KVPair getAtMost(byte[] maxKey, byte[] minKey)
      Description copied from interface: KVStore
      Get the key/value pair having the largest key strictly less than the given maximum, if any.

      An optional (inclusive) minimum key may also be specified; if minKey is null, there is no lower bound (equivalent to a lower bound of the empty byte array); if minKey >= maxKey, null is always returned.

      If keys starting with 0xff are not supported by this instance, and maxKey starts with 0xff, then this method behaves as if maxKey were null.

      Modifications to the returned byte[] arrays do not affect this instance.

      Specified by:
      getAtMost in interface KVStore
      Overrides:
      getAtMost in class AbstractKVStore
      Parameters:
      maxKey - maximum key (exclusive), or null for no maximum (get the largest key)
      minKey - minimum key (inclusive), or null for no minimum (no lower bound)
      Returns:
      largest key/value pair with key < maxKey and key >= minKey, or null if none exists
    • getRange

      public CursorIterator getRange(byte[] minKey, byte[] maxKey, boolean reverse)
      Description copied from interface: KVStore
      Iterate the key/value pairs in the specified range. The returned CloseableIterator's remove() method must be supported and should have the same effect as invoking remove() on the corresponding key.

      If keys starting with 0xff are not supported by this instance, and minKey starts with 0xff, then this method returns an empty iteration.

      If keys starting with 0xff are not supported by this instance, and maxKey starts with 0xff, then this method behaves as if maxKey were null.

      The returned CloseableIterator is weakly consistent (see java.util.concurrent). In short, the returned CloseableIterator must not throw ConcurrentModificationException; however, whether or not a "live" CloseableIterator reflects any modifications made after its creation is implementation dependent. Implementations that do make post-creation updates visible in the CloseableIterator, even if the update occurs after some delay, must preserve the order in which the modifications actually occurred.

      The returned CloseableIterator itself is not guaranteed to be thread safe; is should only be used in the thread that created it.

      Invokers of this method are encouraged to close() the returned iterators, though this is not required for correct behavior.

      Modifications to the returned KVPair key and value byte[] arrays do not affect this instance.

      Parameters:
      minKey - minimum key (inclusive), or null for no minimum (start at the smallest key)
      maxKey - maximum key (exclusive), or null for no maximum (end at the largest key)
      reverse - true to return key/value pairs in reverse order (i.e., keys descending)
      Returns:
      iteration of key/value pairs in the range minKey (inclusive) to maxKey (exclusive)
    • put

      public void put(byte[] key, byte[] value)
      Description copied from interface: KVStore
      Set the value associated with the given key.
      Specified by:
      put in interface KVStore
      Overrides:
      put in class AbstractKVStore
      Parameters:
      key - key
      value - value
    • remove

      public void remove(byte[] key)
      Description copied from interface: KVStore
      Remove the key/value pair with the given key, if it exists.
      Specified by:
      remove in interface KVStore
      Overrides:
      remove in class AbstractKVStore
      Parameters:
      key - key
    • toString

      public String toString()
      Overrides:
      toString in class Object