====== 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 => [[nosql:db_architektur_oracle_nosql_db_11gr2#acid_transaktionelles_verhalten|Ü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: [[http://docs.oracle.com/cd/NOSQL/html/GettingStartedGuide/kvapi.html|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 : [[http://docs.oracle.com/cd/NOSQL/html/GettingStartedGuide/recordput.html| 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: [[http://docs.oracle.com/cd/NOSQL/html/GettingStartedGuide/singleget.html|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 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 ==== Quellen ==== Beispiele: * http://www.oracle.com/technetwork/articles/bigdata/oracle-nosqldb-appdev-1891870.html