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 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:
- TableReadWrite.java
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<Row> result = tableAPI.tableIterator(empEmpnoIndexKey, null, null); while (result.hasNext()) { Row empRowResult = result.next(); // read row String jRow=empRowResult.toJsonString(true); System.out.println(jRow); } } }