Une base de données qui contient le format de données clé-valeur (tableau d'octets). Il est réalisé en C ++ et peut être utilisé en JNI depuis Java. Cependant, l'API de Java n'a pas rattrapé l'API de C ++.
Wiki https://ja.wikipedia.org/wiki/RocksDB
L'utilisation simple est décrite ci-dessous. Consultez la documentation officielle pour plus de détails.
https://github.com/facebook/rocksdb/wiki/RocksJava-Basics
Maven Utilisez les bibliothèques suivantes. Lorsque vous utilisez uniquement RocksDb, seul rocksdbjni est OK. Kryo est ajouté pour la sérialisation et la désérialisation.
<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>
Il existe également une méthode pour fermer, mais nous vous recommandons d'utiliser try-with-resources, alors suivons-la. Pour ouvrir, vous devez spécifier le chemin pour enregistrer la base de données. Si vous spécifiez comme suit, un dossier pour DB sera créé directement sous le projet.
try (RocksDB rocksDb = RocksDB.open("sample")) {
//Écrivez le processus ici
}
Ceci est un exemple d'utilisation de l'API de base. Lire est obtenir, écrire est placé et supprimer est supprimer. En outre, des exemples d'utilisation de toutes les acquisitions (newIterator), de la suppression de plage (deleteRange) et de l'acquisition multiple (multiGetAsList) sont décrits.
public void execute() {
//Ouvrez RocksDB. Spécifiez la destination de sauvegarde de la base de données pour ouvrir (créé directement sous le projet si ce qui suit est spécifié)
try (RocksDB rocksDb = RocksDB.open("sample")) {
//Sérialiser à l'aide de Kryo
byte[] binaryKey = serialize("key");
byte[] binaryValue = serialize("Value");
//Spécifiez la clé et la valeur et mettez-les dans RocksDB (API#put)
//Même si vous enregistrez une clé en double, aucune erreur ne se produira, il suffit de l'écraser
rocksDb.put(binaryKey, binaryValue);
rocksDb.put(binaryKey, binaryValue);
//Obtenu auprès de RocksDB à l'aide de la clé sérialisée (API#get)
try (Input input = new Input(rocksDb.get(binaryKey))) {
System.out.println(kryo.readObject(input, String.class));
}
//Supprimer de RockDB en spécifiant Key (API#delete)
rocksDb.delete(binaryKey);
if (null == rocksDb.get(binaryKey)) {
System.out.println("Je ne peux pas");
}
for (int i = 0; i < 10; i++) {
//Sérialiser à l'aide de Kryo
byte[] tempBinaryKey = serialize("key" + String.valueOf(i));
byte[] tempBinaryValue = serialize("Value"+ String.valueOf(i));
//Spécifiez la clé et la valeur et mettez-les dans RocksDB
rocksDb.put(tempBinaryKey, tempBinaryValue);
}
//Obtenez toutes les données dans RocksDB (API#newIterator)
System.out.println("Obtenez toutes les entrées");
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();
}
//Supprimer dans RocksDB en spécifiant la plage de clés(API#deleteRange)
//Spécifié dans beginKey ~ Immédiatement avant la suppression d'EndKey
rocksDb.deleteRange(serialize("key0"), serialize("key8"));
System.out.println("Touche de suppression de plage 0-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();
}
//Obtenez plusieurs dans RocksDB(#multiGetAsList)
System.out.println("Obtenez plusieurs");
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();
}
Vous pouvez l'utiliser simplement en installant la bibliothèque, vous n'avez même pas besoin d'utiliser RDB, Je pense que cela sera utile dans les situations où la persistance des données est requise.
https://github.com/EsotericSoftware/kryo https://github.com/facebook/rocksdb/wiki/RocksJava-Basics
Recommended Posts