Inhaltsverzeichnis
Die Oracle NoSQL DB abfragen
Verbindung zum Store aufbauen
Über die Factory Klasse KVStoreFactory wird mit Hilfe der Klasse KVStoreConfig die Verbindung zu einem Store aufgebaut.
Notwendige Parameter:
- Name des Stores
- Liste mit den SN Nodes für den Zugriff auf den Store
- Parameter für Consistency und Durability definieren siehe ⇒ Übersicht Key-Value Store der Orace NoSQL DB 11g R2
Aufruf:
// Node liste String[] kvhosts = {"nosqldb01:5000","nosqldb02:5000","nosqldb03:5000"} // Config erzeugen KVStoreConfig kvconfig = new KVStoreConfig("GPIDB", kvhosts); // Consistency definieren kvconfig.setConsistency(Consistency.NONE_REQUIRED); // Durabiltiy definieren kvconfig.setDurability(Durability.COMMIT_NO_SYNC); // Store Zugriff öffnen KVStore kstore = KVStoreFactory.getStore(kvconfig); // Mit dem Store arbeiten // ---------- .... // ---------- // Store wieder schließen kstore.close();
Dokumentation: KVstore Connect
Wert in den Store schreiben
Die einfachste Methode eine Wert in den Store zuschreiben ist die Methode put der Klasse KVstore:
Beispiel:
// Key mit Minor und Mayer Komponente anlegen Key k = Key.createKey("MAIN_KEY", "SLAVE_KEY"); // Wert als Byte Array anlegen byte[] b = ("Wert").getBytes(); // Wert in den Store schreiben kvstore.put(k, Value.createValue(b));
Existiert der Key wird der Wert überschrieben.
Dokumentation : KVstore put
Wert aus dem Store auslesen
// Key erzeugen Key datakey = Key.createKey("ABCDEFG"); // Daten aus dem Store mit den Key wieder lesen ValueVersion vv = kvstore.get(datakey); // Daten auslesen Value vdata = vv.getValue(); // Nutzdaten wieder herstellen String data = new String(vdata.getValue()); // Daten ausgeben System.out.println(data);
Dokumentation: Simple Read
putIfVersion() - Wert aus dem Store auslesen, bearbeiten und prüfen ob der Wert sich in zwischen geändert hat
Jeder Satz im Store hat eine interne Versionsnummer, über dieser Versionsnummer kann beim einfügen ( putIfVersion() ) geprüft werden, ob eine neuer Version des Satzes im Store existiert und entsprechend darauf reagiert werden.
// Schlüssel erzeugen // nur der Mayor Part wird gefüllt Key datakey = Key.createKey(mayorkey); // Daten aus dem Store wieder lesen ValueVersion vv = kvstore.get(datakey); // Version merken Version matchVersion = vv.getVersion(); // Value auslesen Value vdata = vv.getValue(); String data = new String(vdata.getValue()); System.out.println("INFO -- Read Value for the Key::" + mayorkey+" Version("+ matchVersion.getVersion() + ") fond data::" + data); //Daten ändern data="Neuer Wert"; vdata = Value.createValue(data.getBytes()); // wert wieder zurückschreiben Version newVersion = kvstore.putIfVersion(datakey, vdata, matchVersion); // falls Null konnte nicht zurückgeschrieben werden // if (newVersion == null) { //Auf den fehlgeschlagenen Versuch nun reagieren throw new MyException("Fehler aufgetreten..."); }
Gesamten Store auslesen
Beispiel: Zählen aller Datensätze in einem Store mit Hilfe des storeIterator der Klasse KVstore.
public static void countAll() { // Iterator Objekt für den gesamten Store erstellen // zur Zeit (R2) wird nur die Direction.UNORDERED untersützt Iterator<KeyValueVersion> ifulldb = kvstore.storeIterator(Direction.UNORDERED, 10); int storeCount = 0; while (ifulldb.hasNext()) { // Key aus dem Store laden KeyValueVersion e = ifulldb.next(); storeCount++; } System.out.println(" --------------------------------------"); System.out.println(" -- Total Count of Records in the Database :: " + storeCount); System.out.println(" --------------------------------------"); }
KVStore.multiGetIterator() verwenden
siehe diesen Bog Eintrag als Beispiel: http://www.giannakidis.info/post/54370539362/experimenting-with-kvstore-multigetiterator