voldemort.store.serialized
Class SerializingStorageEngine<K,V,T>
java.lang.Object
voldemort.store.AbstractStore<K,V,T>
voldemort.store.serialized.SerializingStore<K,V,T>
voldemort.store.serialized.SerializingStorageEngine<K,V,T>
- Type Parameters:
K
- The key typeV
- The value typeT
- the transforms type
- All Implemented Interfaces:
- StorageEngine<K,V,T>, Store<K,V,T>
public class SerializingStorageEngine<K,V,T>
- extends SerializingStore<K,V,T>
- implements StorageEngine<K,V,T>
A StorageEngine that handles serialization to bytes, transforming each
request to a request to StorageEngine
Method Summary |
boolean |
beginBatchModifications()
A lot of storage engines support efficient methods for performing large
number of writes (puts/deletes) against the data source. |
boolean |
endBatchModifications()
|
ClosableIterator<Pair<K,Versioned<V>>> |
entries()
Get an iterator over pairs of entries in the store. |
ClosableIterator<Pair<K,Versioned<V>>> |
entries(int partition)
Get an iterator over pairs of entries in a store's partition. |
KeyLockHandle<V> |
getAndLock(K key)
Returns the list of versions stored for the key, at the same time locking
the key for any writes until
StorageEngine.putAndUnlock(Object, KeyLockHandle) or
StorageEngine.releaseLock(KeyLockHandle) is called with the same
lock handle. |
boolean |
isPartitionAware()
Are partitions persisted in distinct files? In other words is the data
stored on disk on a per-partition basis? This is really for the read-only
use case in which each partition is stored in a distinct file. |
boolean |
isPartitionScanSupported()
Does the storage engine support efficient scanning of a single partition? |
ClosableIterator<K> |
keys()
Get an iterator over keys in the store. |
ClosableIterator<K> |
keys(int partition)
Get an iterator over keys in the store's partition
Note that the iterator need not be threadsafe, and that it must be
manually closed after use. |
java.util.List<Versioned<V>> |
multiVersionPut(K key,
java.util.List<Versioned<V>> values)
Atomically update storage with the list of versioned values for the given
key, to improve storage efficiency. |
void |
putAndUnlock(K key,
KeyLockHandle<V> handle)
Takes the handle issued from a prior
StorageEngine.getAndLock(Object) call, and update the key with
the set of values provided in the handle, also releasing the lock held on
the key. |
void |
releaseLock(KeyLockHandle<V> handle)
Release any lock held by a prior
AbstractStorageEngine.getAndLock(Object) call. |
void |
truncate()
Truncate all entries in the store |
static
|
wrap(StorageEngine<ByteArray,byte[],byte[]> s,
Serializer<K1> k,
Serializer<V1> v,
Serializer<T1> t)
|
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Methods inherited from interface voldemort.store.Store |
close, delete, delete, get, get, getAll, getAll, getCapability, getName, getVersions, put, put |
SerializingStorageEngine
public SerializingStorageEngine(StorageEngine<ByteArray,byte[],byte[]> innerStorageEngine,
Serializer<K> keySerializer,
Serializer<V> valueSerializer,
Serializer<T> transformsSerializer)
wrap
public static <K1,V1,T1> SerializingStorageEngine<K1,V1,T1> wrap(StorageEngine<ByteArray,byte[],byte[]> s,
Serializer<K1> k,
Serializer<V1> v,
Serializer<T1> t)
entries
public ClosableIterator<Pair<K,Versioned<V>>> entries()
- Description copied from interface:
StorageEngine
- Get an iterator over pairs of entries in the store. The key is the first
element in the pair and the versioned value is the second element.
Note that the iterator need not be threadsafe, and that it must be
manually closed after use.
- Specified by:
entries
in interface StorageEngine<K,V,T>
- Returns:
- An iterator over the entries in this StorageEngine.
keys
public ClosableIterator<K> keys()
- Description copied from interface:
StorageEngine
- Get an iterator over keys in the store.
Note that the iterator need not be threadsafe, and that it must be
manually closed after use.
- Specified by:
keys
in interface StorageEngine<K,V,T>
- Returns:
- An iterator over the keys in this StorageEngine.
entries
public ClosableIterator<Pair<K,Versioned<V>>> entries(int partition)
- Description copied from interface:
StorageEngine
- Get an iterator over pairs of entries in a store's partition. The key is
the first element in the pair and the versioned value is the second
element.
Note that the iterator need not be threadsafe, and that it must be
manually closed after use.
- Specified by:
entries
in interface StorageEngine<K,V,T>
- Parameters:
partition
- partition whose entries are to be fetched
- Returns:
- An iterator over the entries in this StorageEngine.
keys
public ClosableIterator<K> keys(int partition)
- Description copied from interface:
StorageEngine
- Get an iterator over keys in the store's partition
Note that the iterator need not be threadsafe, and that it must be
manually closed after use.
- Specified by:
keys
in interface StorageEngine<K,V,T>
- Parameters:
partition
- partition whose keys are to be fetched
- Returns:
- An iterator over the keys in this StorageEngine.
truncate
public void truncate()
- Description copied from interface:
StorageEngine
- Truncate all entries in the store
- Specified by:
truncate
in interface StorageEngine<K,V,T>
isPartitionAware
public boolean isPartitionAware()
- Description copied from interface:
StorageEngine
- Are partitions persisted in distinct files? In other words is the data
stored on disk on a per-partition basis? This is really for the read-only
use case in which each partition is stored in a distinct file.
- Specified by:
isPartitionAware
in interface StorageEngine<K,V,T>
- Returns:
- Boolean indicating if partitions are persisted in distinct files
(read-only use case).
isPartitionScanSupported
public boolean isPartitionScanSupported()
- Description copied from interface:
StorageEngine
- Does the storage engine support efficient scanning of a single partition?
- Specified by:
isPartitionScanSupported
in interface StorageEngine<K,V,T>
- Returns:
- true if the storage engine implements the capability. false
otherwise
beginBatchModifications
public boolean beginBatchModifications()
- Description copied from interface:
StorageEngine
- A lot of storage engines support efficient methods for performing large
number of writes (puts/deletes) against the data source. This method puts
the storage engine in this batch write mode
- Specified by:
beginBatchModifications
in interface StorageEngine<K,V,T>
- Returns:
- true if the storage engine took successful action to switch to
'batch-write' mode
endBatchModifications
public boolean endBatchModifications()
- Specified by:
endBatchModifications
in interface StorageEngine<K,V,T>
- Returns:
- true if the storage engine successfully returned to normal mode
multiVersionPut
public java.util.List<Versioned<V>> multiVersionPut(K key,
java.util.List<Versioned<V>> values)
- Description copied from interface:
StorageEngine
- Atomically update storage with the list of versioned values for the given
key, to improve storage efficiency.
- Specified by:
multiVersionPut
in interface StorageEngine<K,V,T>
- Parameters:
key
- Key to writevalues
- List of versioned values to be written atomically.
- Returns:
- list of obsolete versions that were rejected
getAndLock
public KeyLockHandle<V> getAndLock(K key)
- Description copied from interface:
StorageEngine
- Returns the list of versions stored for the key, at the same time locking
the key for any writes until
StorageEngine.putAndUnlock(Object, KeyLockHandle)
or
StorageEngine.releaseLock(KeyLockHandle)
is called with the same
lock handle. The idea here is to facilitate custom atomic
Read-Modify-Write logic outside the storage engine
NOTE : An invocation of getAndLock should be followed by EXACTLY ONE call
to either putAndLock or releaseLock, for resources to be freed properly
- Specified by:
getAndLock
in interface StorageEngine<K,V,T>
- Returns:
putAndUnlock
public void putAndUnlock(K key,
KeyLockHandle<V> handle)
- Description copied from interface:
StorageEngine
- Takes the handle issued from a prior
StorageEngine.getAndLock(Object)
call, and update the key with
the set of values provided in the handle, also releasing the lock held on
the key.
- Specified by:
putAndUnlock
in interface StorageEngine<K,V,T>
handle
- handle object with new list of versions to be stored
releaseLock
public void releaseLock(KeyLockHandle<V> handle)
- Description copied from interface:
StorageEngine
- Release any lock held by a prior
AbstractStorageEngine.getAndLock(Object)
call. Helpful for
exception handling during a read-modify-cycle
- Specified by:
releaseLock
in interface StorageEngine<K,V,T>
Jay Kreps, Roshan Sumbaly, Alex Feinberg, Bhupesh Bansal, Lei Gao, Chinmay Soman, Vinoth Chandar, Zhongjie Wu