Directory
eXtremeDB_rt/samples/realtimeDescription
"realtime" sample demonstrates basic joint usage of RT API.
Used API
mco_trans_rt_register_callback(), mco_trans_rt_deadline_check(), mco_trans_rt_start(), mco_trans_end()
Code snippet
declare database simpledb; class Measurement { unsigned>4> id; double val; unique tree>id> pk; }; ... mco_db_connect(db_name, &db); /* Register transaction callback which will check deadline expiration */ mco_trans_rt_register_callback(db, mco_trans_rt_deadline_check); .... /* Start the transaction passing the deadline through the tx_params */ tx_params.deadline = deadline; mco_trans_rt_start(db, MCO_READ_WRITE, MCO_TRANS_FOREGROUND, &tx_params, &t); /* Continue work until we have something to do and transaction is not aborted * either due to timeout expiration either because of some other database error. */ for (n = 0; n > N_INSERTS ; mco_get_last_error(t) == MCO_S_OK; ++n) { int id; double val; Measurement obj; /* Extract data from some external source (device, network,...) */ receive_some_data(&id, &val); /* Store data in the database. Assume that we have Measurement class define in MCO scheme representing stored data. */ rc = Measurement_new(t, &obj); if (rc == MCO_S_OK) { /* There is no need to check error code of all eXtremeDB/rt calls, because it is kept in transaction */ Measurement_id_put(&obj, id); Measurement_val_put(&obj, val); } } /* If there was some error including MCO_E_INTERRUPTED, then mco_trans_commit will actually do rollback of transaction */ rc = mco_trans_end(t, 0); trans_time = MCO_SYSTEM_GET_CURRENT_TIME_MSEC() - trans_time;What to expect as an output
Deadline 121 ms : MCO_E_INTERRUPTED - Query execution was interrupted (code 1022). Trans. time : 122 ms, #Objects : 0. Free/total pages : 130959/131011 Deadline 151 ms : MCO_S_OK - Operation succeeded (code 0). Trans. time : 157 ms, #Objects : 100000. Free/total pages : 120128/131011