Versuchen Sie es mit RocksDB mit Java

Was ist RocksDB?

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

Wie benutzt man

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>

Öffnen schließen

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
        }

Lesen, schreiben, löschen

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

Wann benutzt du es?

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.

Referenz

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

Recommended Posts

Versuchen Sie es mit RocksDB mit Java
Versuchen Sie es mit der Stream-API in Java
Versuchen Sie es mit der JSON-Format-API in Java
Versuchen Sie es mit Sourcetrail (Win-Version) mit Java-Code
Versuchen Sie, die Cloud Vision-API von GCP in Java zu verwenden
Versuchen Sie es mit Sourcetrail (MacOS-Version) mit Java-Code
Versuchen Sie es mit der Syntaxanalyse der COTOHA-API in Java
Versuchen Sie, mit Java zu kratzen [Hinweis]
Versuchen Sie, JavaScript in Java aufzurufen
Lassen Sie uns Spresense mit Java entwickeln (1)
Probieren Sie den Funktionstyp in Java aus! ①
Versuchen Sie es mit globalem Hooking in Java mithilfe der JNativeHook-Bibliothek
Versuchen Sie, Android Hilt in Java zu implementieren
Verschlüsselung mit RSA-Verschlüsselung in Java
Versuchen Sie, Selenuim 3.141.59 mit Eclipse (Java) auszuführen.
Versuchen Sie es mit Redis mit Java (jar)
Versuchen Sie einen If-Ausdruck in Java
[Java] Versuchen Sie, mithilfe von Generika zu implementieren
HTTPS-Verbindung mit tls1.2 in Java 6
Ich habe versucht, JWT in Java zu verwenden
Versuchen Sie, AWS X-Ray in Java auszuführen
Versuchen Sie, Yuma in Java zu implementieren
Versuchen Sie es mit der IBM Java-Methodenverfolgung
Versuchen Sie es mit dem Java SDK von Hyperledger Iroha
[Java] Wo haben Sie versucht, Java zu verwenden?
Implementieren Sie Thread in Java und versuchen Sie, die anonyme Klasse Lambda zu verwenden
Versuchen Sie es mit libGDX
Versuchen Sie es mit dem Java Framework Nablarch [Web Application]
Ich habe versucht, die Elasticsearch-API in Java zu verwenden
Versuchen Sie, Project Euler in Java zu lösen
Versuchen Sie es mit Maven
Versuchen Sie es mit powermock-mockito2-2.0.2
Partisierung in Java
Versuchen Sie es mit GraalVM
Versuchen Sie, n-ary Addition in Java zu implementieren
Probieren Sie Java 8 Stream aus
Map ohne Verwendung eines Arrays in Java
Versuchen Sie es mit jmockit 1.48
Änderungen in Java 11
Java lernen Versuchen Sie es mit einem Scanner oder einer Karte
ERRORCODE = -4471 tritt in einer Java-Anwendung auf, die Db2 verwendet.
Janken in Java
Versuchen Sie, den CORBA-Dienst unter Java 11+ aufzurufen
Versuchen Sie es mit SwiftLint
Versuchen Sie es mit Log4j 2.0
Lesen Sie Felica mit RC-S380 (PaSoRi) in Java
Lassen Sie uns eine Taschenrechner-App mit Java erstellen
Versuchen Sie es mit der REST-API von JobScheduler - Java RestClient-Implementierung -
Umfangsrate in Java
Versuchen Sie es mit Java 9
Versuchen Sie es mit der Wii-Fernbedienung in Java
FizzBuzz in Java
NLP4J Versuchen Sie eine syntaktische Analyse von Japanisch unter Verwendung der japanischen Abhängigkeitsanalyse (V1) von Yahoo! Developer Network in Java
Versuchen Sie, Firebase Cloud-Funktionen unter Android (Java) zu verwenden.
Versuchen Sie es mit der RestClient Test-Klasse der REST-API-Java von JobScheduler.
ChatWork4j für die Verwendung der ChatWork-API in Java
[Java] API-Erstellung mit Jerjey (Jax-rs) mit Eclipse