LevelDB Java Api
4445 ワード
LevelDBはK-Vデータベースです.
LevelDBは、データを格納する際に、記録されたkey値に基づいて順次格納される.すなわち、隣接するkey値は、格納ファイルに順次格納され、keyサイズ比較関数をカスタマイズすることができ、LevleDbは、ユーザ定義の比較関数に従って順次格納される.
たとえば、intタイプのキーは、levelDBのデフォルトでは自然な順序(昇順)で格納され、他のタイプでは比較関数をカスタマイズできます.
注意:範囲検索には、その順序付けされたストレージというプロパティを使用します.
LevelDB APIの使用
1.パイロットコマンド:
2.オープン・データベースを閉じる
3.データの追加、調査、削除
4.一括操作、Performing Batch/Bulk/ATomic Updates.
5.Iterating key/values.
6.スナップショットWorking against a Snapshot view of the Database.
7.カスタムコンパレータUsing a custom Comparator.
8.圧縮Disabling Compressionの無効化
9.キャッシュコンフィギュレーションConfiguring the Cache
9.近似寸法を取得する.
10.データベースの状態を取得する
11.ログ情報の取得
12.データベースの破棄
13.データベースの修復
14メモリプールを使用すると、ネイティブメモリの割り当て効率が向上します.Using a memory pool to make native memory allocations more efficient:
参照先:
https://github.com/fusesource/leveldbjni
LevelDBは、データを格納する際に、記録されたkey値に基づいて順次格納される.すなわち、隣接するkey値は、格納ファイルに順次格納され、keyサイズ比較関数をカスタマイズすることができ、LevleDbは、ユーザ定義の比較関数に従って順次格納される.
たとえば、intタイプのキーは、levelDBのデフォルトでは自然な順序(昇順)で格納され、他のタイプでは比較関数をカスタマイズできます.
注意:範囲検索には、その順序付けされたストレージというプロパティを使用します.
LevelDB APIの使用
1.パイロットコマンド:
import org.iq80.leveldb.*;
import static org.fusesource.leveldbjni.JniDBFactory.*;
import java.io.*;
2.オープン・データベースを閉じる
Options options = new Options();
options.createIfMissing(true);
DB db = factory.open(new File("example"), options);
try {
// Use the db in here....
} finally {
// Make sure you close the db to shutdown the
// database and avoid resource leaks.
db.close();
}
3.データの追加、調査、削除
db.put(bytes("Tampa"), bytes("rocks"));
String value = asString(db.get(bytes("Tampa")));
db.delete(bytes("Tampa"));
4.一括操作、Performing Batch/Bulk/ATomic Updates.
WriteBatch batch = db.createWriteBatch();
try {
batch.delete(bytes("Denver"));
batch.put(bytes("Tampa"), bytes("green"));
batch.put(bytes("London"), bytes("red"));
db.write(batch);
} finally {
// Make sure you close the batch to avoid resource leaks.
batch.close();
}
5.Iterating key/values.
DBIterator iterator = db.iterator();
try {
for(iterator.seekToFirst(); iterator.hasNext(); iterator.next()) {
String key = asString(iterator.peekNext().getKey());
String value = asString(iterator.peekNext().getValue());
System.out.println(key+" = "+value);
}
} finally {
// Make sure you close the iterator to avoid resource leaks.
iterator.close();
}
6.スナップショットWorking against a Snapshot view of the Database.
ReadOptions ro = new ReadOptions();
ro.snapshot(db.getSnapshot());
try {
// All read operations will now use the same
// consistent view of the data.
... = db.iterator(ro);
... = db.get(bytes("Tampa"), ro);
} finally {
// Make sure you close the snapshot to avoid resource leaks.
ro.snapshot().close();
}
7.カスタムコンパレータUsing a custom Comparator.
DBComparator comparator = new DBComparator(){
public int compare(byte[] key1, byte[] key2) {
return new String(key1).compareTo(new String(key2));
}
public String name() {
return "simple";
}
public byte[] findShortestSeparator(byte[] start, byte[] limit) {
return start;
}
public byte[] findShortSuccessor(byte[] key) {
return key;
}
};
Options options = new Options();
options.comparator(comparator);
DB db = factory.open(new File("example"), options);
8.圧縮Disabling Compressionの無効化
Options options = new Options();
options.compressionType(CompressionType.NONE);
DB db = factory.open(new File("example"), options);
9.キャッシュコンフィギュレーションConfiguring the Cache
Options options = new Options();
options.cacheSize(100 * 1048576); // 100MB cache
DB db = factory.open(new File("example"), options);
9.近似寸法を取得する.
long[] sizes = db.getApproximateSizes(new Range(bytes("a"), bytes("k")), new Range(bytes("k"), bytes("z")));
System.out.println("Size: "+sizes[0]+", "+sizes[1]);
10.データベースの状態を取得する
String stats = db.getProperty("leveldb.stats");
System.out.println(stats);
11.ログ情報の取得
Logger logger = new Logger() {
public void log(String message) {
System.out.println(message);
}
};
Options options = new Options();
options.logger(logger);
DB db = factory.open(new File("example"), options);
12.データベースの破棄
Options options = new Options();
factory.destroy(new File("example"), options);
13.データベースの修復
Options options = new Options();
factory.repair(new File("example"), options);
14メモリプールを使用すると、ネイティブメモリの割り当て効率が向上します.Using a memory pool to make native memory allocations more efficient:
JniDBFactory.pushMemoryPool(1024 * 512);
try {
// .. work with the DB in here,
} finally {
JniDBFactory.popMemoryPool();
}
参照先:
https://github.com/fusesource/leveldbjni