174 lines
5.6 KiB
Java
174 lines
5.6 KiB
Java
|
package org.apache.jdbm;
|
||
|
|
||
|
import java.util.*;
|
||
|
import java.util.concurrent.ConcurrentMap;
|
||
|
import java.util.concurrent.ConcurrentNavigableMap;
|
||
|
|
||
|
/**
|
||
|
* Database is root class for creating and loading persistent collections. It also contains
|
||
|
* transaction operations.
|
||
|
* //TODO just write some readme
|
||
|
* <p/>
|
||
|
*
|
||
|
* @author Jan Kotek
|
||
|
* @author Alex Boisvert
|
||
|
* @author Cees de Groot
|
||
|
*/
|
||
|
public interface DB {
|
||
|
|
||
|
/**
|
||
|
* Closes the DB and release resources.
|
||
|
* DB can not be used after it was closed
|
||
|
*/
|
||
|
void close();
|
||
|
|
||
|
/** @return true if db was already closed */
|
||
|
boolean isClosed();
|
||
|
|
||
|
/**
|
||
|
* Clear cache and remove all entries it contains.
|
||
|
* This may be useful for some Garbage Collection when reference cache is used.
|
||
|
*/
|
||
|
void clearCache();
|
||
|
|
||
|
/**
|
||
|
* Defragments storage so it consumes less space.
|
||
|
* It basically copyes all records into different store and then renames it, replacing original store.
|
||
|
* <p/>
|
||
|
* Defrag has two steps: In first collections are rearranged, so records in collection are close to each other,
|
||
|
* and read speed is improved. In second step all records are sequentially transferred, reclaiming all unused space.
|
||
|
* First step is optinal and may slow down defragmentation significantly as ut requires many random-access reads.
|
||
|
* Second step reads and writes data sequentially and is very fast, comparable to copying files to new location.
|
||
|
*
|
||
|
* <p/>
|
||
|
* This commits any uncommited data. Defrag also requires free space, as store is basically recreated at new location.
|
||
|
*
|
||
|
* @param sortCollections if collection records should be rearranged during defragment, this takes some extra time
|
||
|
*/
|
||
|
void defrag(boolean sortCollections);
|
||
|
|
||
|
/**
|
||
|
* Commit (make persistent) all changes since beginning of transaction.
|
||
|
* JDBM supports only single transaction.
|
||
|
*/
|
||
|
void commit();
|
||
|
|
||
|
/**
|
||
|
* Rollback (cancel) all changes since beginning of transaction.
|
||
|
* JDBM supports only single transaction.
|
||
|
* This operations affects all maps created or loaded by this DB.
|
||
|
*/
|
||
|
void rollback();
|
||
|
|
||
|
/**
|
||
|
* This calculates some database statistics such as collection sizes and record distributions.
|
||
|
* Can be useful for performance optimalisations and trouble shuting.
|
||
|
* This method can run for very long time.
|
||
|
*
|
||
|
* @return statistics contained in string
|
||
|
*/
|
||
|
String calculateStatistics();
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Copy database content into ZIP file
|
||
|
* @param zipFile
|
||
|
*/
|
||
|
void copyToZip(String zipFile);
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Get a <code>Map</code> which was already created and saved in DB.
|
||
|
* This map uses disk based H*Tree and should have similar performance
|
||
|
* as <code>HashMap</code>.
|
||
|
*
|
||
|
* @param name of hash map
|
||
|
*
|
||
|
* @return map
|
||
|
*/
|
||
|
<K, V> ConcurrentMap<K, V> getHashMap(String name);
|
||
|
|
||
|
/**
|
||
|
* Creates Map which persists data into DB.
|
||
|
*
|
||
|
* @param name record name
|
||
|
* @return
|
||
|
*/
|
||
|
<K, V> ConcurrentMap<K, V> createHashMap(String name);
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Creates Hash Map which persists data into DB.
|
||
|
* Map will use custom serializers for Keys and Values.
|
||
|
* Leave keySerializer null to use default serializer for keys
|
||
|
*
|
||
|
* @param <K> Key type
|
||
|
* @param <V> Value type
|
||
|
* @param name record name
|
||
|
* @param keySerializer serializer to be used for Keys, leave null to use default serializer
|
||
|
* @param valueSerializer serializer to be used for Values
|
||
|
* @return
|
||
|
*/
|
||
|
<K, V> ConcurrentMap<K, V> createHashMap(String name, Serializer<K> keySerializer, Serializer<V> valueSerializer);
|
||
|
|
||
|
<K> Set<K> createHashSet(String name);
|
||
|
|
||
|
<K> Set<K> getHashSet(String name);
|
||
|
|
||
|
<K> Set<K> createHashSet(String name, Serializer<K> keySerializer);
|
||
|
|
||
|
<K, V> ConcurrentNavigableMap<K, V> getTreeMap(String name);
|
||
|
|
||
|
/**
|
||
|
* Create TreeMap which persists data into DB.
|
||
|
*
|
||
|
* @param <K> Key type
|
||
|
* @param <V> Value type
|
||
|
* @param name record name
|
||
|
* @return
|
||
|
*/
|
||
|
<K extends Comparable, V> NavigableMap<K, V> createTreeMap(String name);
|
||
|
|
||
|
/**
|
||
|
* Creates TreeMap which persists data into DB.
|
||
|
*
|
||
|
* @param <K> Key type
|
||
|
* @param <V> Value type
|
||
|
* @param name record name
|
||
|
* @param keyComparator Comparator used to sort keys
|
||
|
* @param keySerializer Serializer used for keys. This may reduce disk space usage *
|
||
|
* @param valueSerializer Serializer used for values. This may reduce disk space usage
|
||
|
* @return
|
||
|
*/
|
||
|
<K, V> ConcurrentNavigableMap<K, V> createTreeMap(String name,
|
||
|
Comparator<K> keyComparator, Serializer<K> keySerializer, Serializer<V> valueSerializer);
|
||
|
|
||
|
<K> NavigableSet<K> getTreeSet(String name);
|
||
|
|
||
|
<K> NavigableSet<K> createTreeSet(String name);
|
||
|
|
||
|
<K> NavigableSet<K> createTreeSet(String name, Comparator<K> keyComparator, Serializer<K> keySerializer);
|
||
|
|
||
|
<K> List<K> createLinkedList(String name);
|
||
|
|
||
|
<K> List<K> createLinkedList(String name, Serializer<K> serializer);
|
||
|
|
||
|
<K> List<K> getLinkedList(String name);
|
||
|
|
||
|
/** returns unmodifiable map which contains all collection names and collections thenselfs*/
|
||
|
Map<String,Object> getCollections();
|
||
|
|
||
|
/** completely remove collection from store*/
|
||
|
void deleteCollection(String name);
|
||
|
|
||
|
/** Java Collections returns their size as int. This may not be enought for JDBM collections.
|
||
|
* This method returns number of elements in JDBM collection as long.
|
||
|
*
|
||
|
* @param collection created by JDBM
|
||
|
* @return number of elements in collection as long
|
||
|
*/
|
||
|
long collectionSize(Object collection);
|
||
|
|
||
|
}
|