Eine Datenbank, die das Schlüsselwert-Datenformat (Byte-Array) enthält. Es ist in C ++ erstellt und kann in JNI von Java aus verwendet werden. Die Java-API hat jedoch die C ++ - API nicht eingeholt.
Wiki https://ja.wikipedia.org/wiki/RocksDB
Die einfache Verwendung wird unten beschrieben. Einzelheiten finden Sie in der offiziellen Dokumentation.
https://github.com/facebook/rocksdb/wiki/RocksJava-Basics
Maven Verwenden Sie die folgenden Bibliotheken. Wenn Sie nur RocksDb verwenden, ist nur rocksdbjni in Ordnung. Kryo wird zur Serialisierung und Deserialisierung hinzugefügt.
<dependency>
<groupId>org.rocksdb</groupId>
<artifactId>rocksdbjni</artifactId>
<version>6.0.1</version>
</dependency>
<dependency>
<groupId>com.esotericsoftware</groupId>
<artifactId>kryo</artifactId>
<version>3.0.1</version>
</dependency>
Es gibt auch eine Methode zum Schließen, aber wir empfehlen die Verwendung von Try-with-Resources. Folgen wir dieser Methode. Zum Öffnen müssen Sie den Pfad zum Speichern der Datenbank angeben. Wenn Sie Folgendes angeben, wird direkt unter dem Projekt ein Ordner für die Datenbank erstellt.
try (RocksDB rocksDb = RocksDB.open("sample")) {
//Schreiben Sie den Prozess hier
}
Dies ist ein Beispiel für die Verwendung der Basis-API. Lesen ist bekommen, schreiben wird gesetzt und löschen ist löschen. Darüber hinaus werden Verwendungsbeispiele für alle Erfassungen (newIterator), Bereichslöschungen (deleteRange) und Mehrfacherfassungen (multiGetAsList) beschrieben.
public void execute() {
//Öffnen Sie RocksDB. Geben Sie das DB-Speicherziel für open an (direkt unter dem Projekt erstellt, wenn Folgendes angegeben ist).
try (RocksDB rocksDb = RocksDB.open("sample")) {
//Mit Kryo serialisieren
byte[] binaryKey = serialize("key");
byte[] binaryValue = serialize("Value");
//Geben Sie Schlüssel und Wert an und geben Sie sie in RocksDB (API) ein#put)
//Selbst wenn Sie einen doppelten Schlüssel registrieren, tritt kein Fehler auf. Überschreiben Sie ihn einfach
rocksDb.put(binaryKey, binaryValue);
rocksDb.put(binaryKey, binaryValue);
//Wird von RocksDB mithilfe des serialisierten Schlüssels (API) bezogen#get)
try (Input input = new Input(rocksDb.get(binaryKey))) {
System.out.println(kryo.readObject(input, String.class));
}
//Löschen Sie aus RockDB, indem Sie Key (API) angeben#delete)
rocksDb.delete(binaryKey);
if (null == rocksDb.get(binaryKey)) {
System.out.println("Kann nicht bekommen");
}
for (int i = 0; i < 10; i++) {
//Mit Kryo serialisieren
byte[] tempBinaryKey = serialize("key" + String.valueOf(i));
byte[] tempBinaryValue = serialize("Value"+ String.valueOf(i));
//Geben Sie Schlüssel und Wert an und setzen Sie ihn in RocksDB
rocksDb.put(tempBinaryKey, tempBinaryValue);
}
//Holen Sie sich alle Daten in RocksDB (API#newIterator)
System.out.println("Holen Sie sich alle Einträge");
RocksIterator iterator = rocksDb.newIterator();
iterator.seekToFirst();
while (iterator.isValid()) {
try (Input input = new Input(iterator.key())) {
System.out.println(kryo.readObject(input, String.class));
}
iterator.next();
}
//Löschen Sie in RocksDB, indem Sie den Tastenbereich angeben(API#deleteRange)
//Angegeben in beginKey ~ Unmittelbar bevor EndKey gelöscht wird
rocksDb.deleteRange(serialize("key0"), serialize("key8"));
System.out.println("Bereichslöschschlüssel0-key7");
RocksIterator iterator2 = rocksDb.newIterator();
iterator2.seekToFirst();
while (iterator2.isValid()) {
try (Input input = new Input(iterator2.value())) {
System.out.println(kryo.readObject(input, String.class));
}
iterator2.next();
}
//Holen Sie sich mehrere in RocksDB(#multiGetAsList)
System.out.println("Holen Sie sich mehrere");
List<byte[]> binaryKeyList = new ArrayList<>();
binaryKeyList.add(serialize("key8"));
binaryKeyList.add(serialize("key9"));
List<byte[]> binaryValueList = rocksDb.multiGetAsList(binaryKeyList);
for (byte[] binary:binaryValueList) {
try (Input input = new Input(binary)) {
System.out.println(kryo.readObject(input, String.class));
}
}
} catch (RocksDBException e) {
throw new RuntimeException(e);
}
}
private byte[] serialize(String str) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try (Output output = new Output(baos)) {
kryo.writeObject(output, str);
}
return baos.toByteArray();
}
Sie können es einfach durch Installieren der Bibliothek verwenden, sodass Sie nicht einmal RDB verwenden müssen. Ich denke, es wird in Situationen nützlich sein, in denen Datenpersistenz erforderlich ist.
https://github.com/EsotericSoftware/kryo https://github.com/facebook/rocksdb/wiki/RocksJava-Basics
Recommended Posts