Essayez d'utiliser RocksDB avec Java

Qu'est-ce que RocksDB

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

Comment utiliser

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>

Ouvrir fermer

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
        }

Lire, écrire, supprimer

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();
	}

Quand l'utilisez vous?

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.

référence

https://github.com/EsotericSoftware/kryo https://github.com/facebook/rocksdb/wiki/RocksJava-Basics

Recommended Posts

Essayez d'utiliser RocksDB avec Java
Essayez d'utiliser l'API Stream en Java
Essayez d'utiliser l'API au format JSON en Java
Essayez d'utiliser Sourcetrail (version win) avec du code Java
Essayez d'utiliser l'API Cloud Vision de GCP en Java
Essayez d'utiliser Sourcetrail (version macOS) avec du code Java
Essayez d'utiliser l'analyse syntaxique de l'API COTOHA en Java
Essayez de gratter en utilisant Java [Note]
Essayez d'appeler JavaScript en Java
Essayez de développer Spresense avec Java (1)
Essayez le type fonctionnel en Java! ①
Essayez le hooking global en Java à l'aide de la bibliothèque JNativeHook
Essayez d'implémenter Android Hilt en Java
Chiffrer à l'aide du chiffrement RSA en Java
Essayez d'exécuter Selenuim 3.141.59 avec eclipse (java)
Essayez d'utiliser Redis avec Java (jar)
Essayez une expression If en Java
[Java] Essayez de mettre en œuvre à l'aide de génériques
Connexion HTTPS utilisant tls1.2 dans Java 6
J'ai essayé d'utiliser JWT en Java
Essayez d'exécuter AWS X-Ray en Java
Essayez d'implémenter Yuma en Java
Essayez d'utiliser le traçage de méthode IBM Java
Essayez d'utiliser le SDK Java d'Hyperledger Iroha
[Java] Où avez-vous essayé d'utiliser java
Implémentez Thread en Java et essayez d'utiliser la classe anonyme Lambda
Essayez d'utiliser libGDX
Essayez d'utiliser le framework Java Nablarch [Application Web]
J'ai essayé d'utiliser l'API Elasticsearch en Java
Essayez de résoudre Project Euler en Java
Essayez d'utiliser Maven
Essayez d'utiliser powermock-mockito2-2.0.2
Partition en Java
Essayez d'utiliser GraalVM
Essayez d'implémenter l'ajout n-aire en Java
Essayez Java 8 Stream
Mapper sans utiliser de tableau en java
Essayez d'utiliser jmockit 1.48
Changements dans Java 11
Étude de Java Essayez d'utiliser un scanner ou une carte
ERRORCODE = -4471 se produit dans une application Java qui utilise Db2.
Janken à Java
Essayez d'appeler le service CORBA sur Java 11+
Essayez d'utiliser SwiftLint
Essayez d'utiliser Log4j 2.0
Lire Felica en utilisant RC-S380 (PaSoRi) en Java
Créons une application de calcul avec Java
Essayez d'utiliser l'API REST de JobScheduler - implémentation Java RestClient--
Taux circonférentiel à Java
Essayez grossièrement Java 9
Essayez d'utiliser la télécommande Wii en Java
FizzBuzz en Java
NLP4J [002] Essayez l'analyse syntaxique du japonais à l'aide de Yahoo! Developer Network Japanese Dependency Analysis (V1) en Java
Essayez d'utiliser Firebase Cloud Functions sur Android (Java)
Essayez d'utiliser la classe de test RestClient de JobScheduler REST-API-Java-
ChatWork4j pour l'utilisation de l'API ChatWork en Java
[Java] Création d'API à l'aide de Jerjey (Jax-rs) avec eclipse