====== 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