====== Das Konzept einer Tabelle in der NoSQL Datenbank v3 verwenden ======
Mit der Version 3 der Oracle NoSQL Datenbank wird das Konzept der Tabelle in den Key-Value Store eingeführt.
Neben der Vereinfachung der Entwicklung steht dem Entwickler dann auch das Konzept eines Index auf die Values des Stores zur Verfügung.
Eine Tabelle wird erst mit **table create** definiert und damit mit einem **plan add-table** erzeugt.
Beispiel Anlegen der Tabelle EMP:
Starten der Koncole (hier als Beispiel mit einer [[nosql:lokale_testdatenbank_oracle_nosql_db_11gr2|lokalen Testinstallation]]
set KVHOME=D:\entwicklung\libraries\kv-ee-3.0.5
java -jar %KVHOME%\lib\kvcli.jar -host localhost -port 5000 -store kvstore
Die Tabelle anlegen:
kv-> table create -name emp -desc "Die Mitarbeiter"
emp-> add-field -type integer -name empno
emp-> primary-key -field empno
emp-> add-field -type string -name ename -not-nullable -default "NEW"
emp-> add-field -type string -name job
emp-> add-field -type integer -name mgr
emp-> add-field -type long -name hiredate
emp-> add-field -type float -name sal -default 0
emp-> add-field -type float -name comm
emp-> add-field -type integer -name deptno
emp-> exit
Table emp built.
kv-> plan add-table -name emp -wait
Executed plan 5, waiting for completion...
Plan 5 ended successfully
Eine Index auf den Namen mit **"plan add-index -name"** anlegen:
kv-> plan add-index -name IDX_EMP_ENAME -table emp -field ename
Started plan 6. Use show plan -id 6 to check status.
To wait for completion, use plan wait -id 6
kv-> plan wait -id 6
Plan 6 ended successfully
Mit **show tables** alle Tabellen anzeigen, mit **show tables -name** eine bestehende Tabelle als JSON Schema anzeigen.
Die erzeugte Tabelle anzeigen mit:
kv-> show tables
Tables:
emp -- Die Mitarbeiter
kv-> show tables -name emp
{
"type" : "table",
"name" : "emp",
"description" : "Die Mitarbeiter",
"shardKey" : [ "empno" ],
"primaryKey" : [ "empno" ],
"fields" : [ {
"name" : "empno",
"type" : "INTEGER",
"nullable" : true,
"default" : null
}, {
"name" : "ename",
"type" : "STRING",
"nullable" : false,
"default" : "NEW"
}, {
"name" : "job",
"type" : "STRING",
"nullable" : true,
"default" : null
}, {
"name" : "mgr",
"type" : "INTEGER",
"nullable" : true,
"default" : null
}, {
"name" : "hiredate",
"type" : "LONG",
"nullable" : true,
"default" : null
}, {
"name" : "sal",
"type" : "FLOAT",
"nullable" : true,
"default" : 0.0
}, {
"name" : "comm",
"type" : "FLOAT",
"nullable" : true,
"default" : null
}, {
"name" : "deptno",
"type" : "INTEGER",
"nullable" : true,
"default" : null
} ],
"indexes" : [ {
"name" : "IDX_EMP_ENAME",
"description" : null,
"fields" : [ "ename" ]
} ]
}
Daten auslesen:
kv-> get table -name emp -pretty
{
"empno" : 10,
"ename" : "Gunther",
"job" : "Developer",
"mgr" : 0,
"hiredate" : 1388531040000,
"sal" : 1000.0,
"comm" : 5.0,
"deptno" : 10
}
1 row returned.
Einfache Java Klasse um die Daten in die Tabelle einzulesen:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import oracle.kv.KVStore;
import oracle.kv.KVStoreConfig;
import oracle.kv.KVStoreFactory;
import oracle.kv.table.Row;
import oracle.kv.table.Table;
import oracle.kv.table.TableAPI;
public class TableReadWrite {
// KV Store
public static KVStore kvstore = null;
public static void main(String[] args) throws ParseException {
TableReadWrite tableReadWrite = new TableReadWrite();
// get the host to connect as first parameter
String host = "localhost:5000";
// get the store Name
String store = "kvstore";
KVStoreConfig kvconfig = new KVStoreConfig(store, host);
// Connect to the store
kvstore = KVStoreFactory.getStore(kvconfig);
// get the Table API
TableAPI tableAPI = kvstore.getTableAPI();
//get a reference to the table
Table empTable = tableAPI.getTable("emp");
// Get a Row instance
Row empRow = empTable.createRow();
// put data in the row
empRow.put("empno", 10);
empRow.put("ename", "Gunther");
empRow.put("job", "Developer");
empRow.put("mgr", 0);
// date handling
SimpleDateFormat formatter = new SimpleDateFormat("dd.mm.yyyy");
Date date = (Date) formatter.parse("01.04.2014");
empRow.put("hiredate", date.getTime());
empRow.put("sal", 1000f);
empRow.put("comm", 5f);
empRow.put("deptno", 10);
// write the data to the store
tableAPI.put(empRow, null, null);
//-------- Read the data again from the Store
//------- Use an Index
//get Ref on the index
Index empEmpnoIndex = empTable.getIndex("IDX_EMP_ENAME");
IndexKey empEmpnoIndexKey=empEmpnoIndex.createIndexKey();
TableIterator result = tableAPI.tableIterator(empEmpnoIndexKey, null, null);
while (result.hasNext()) {
Row empRowResult = result.next();
// read row
String jRow=empRowResult.toJsonString(true);
System.out.println(jRow);
}
}
}
==== Quellen ====
DOAG:
* http://www.doag.org/de/home/aktuelle-news/article/so-nutzen-sie-die-tabellen-schnittstelle-von-oracle-nosql-database-30.html
Oracle:
* http://docs.oracle.com/cd/NOSQL/html/GettingStartedGuideTables/
* http://www.youtube.com/watch?v=o7B94ch8iVs