nosqldb-oraclejs
Version:
Oracle NoSQL Database JS Driver
147 lines (131 loc) • 4.97 kB
JavaScript
/*-
*
* This file is part of Oracle NoSQL Database
* Copyright (C) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
*
* If you have received this file as part of Oracle NoSQL Database the
* following applies to the work as a whole:
*
* Oracle NoSQL Database server software is free software: you can
* redistribute it and/or modify it under the terms of the GNU Affero
* General Public License as published by the Free Software Foundation,
* version 3.
*
* Oracle NoSQL Database is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Affero General Public License for more details.
*
* If you have received this file as part of Oracle NoSQL Database Client or
* distributed separately the following applies:
*
* Oracle NoSQL Database client software is free software: you can
* redistribute it and/or modify it under the terms of the Apache License
* as published by the Apache Software Foundation, version 2.0.
*
* You should have received a copy of the GNU Affero General Public License
* and/or the Apache License in the LICENSE file along with Oracle NoSQL
* Database client or server distribution. If not, see
* <http://www.gnu.org/licenses/>
* or
* <http://www.apache.org/licenses/LICENSE-2.0>.
*
* An active Oracle commercial licensing agreement for this product supersedes
* these licenses and in such case the license notices, but not the copyright
* notice, may be removed by you in connection with your distribution that is
* in accordance with the commercial licensing terms.
*
* For more information please contact:
*
* berkeleydb-info_us@oracle.com
*
*/
;
/**
* This example demonstrates usage of Time-to-Live (TTL) feature of the
* Oracle NoSQL Database JS API.
*
* The example:
* - Creates a table.
* - Puts a row in the table with a TTL value.
* - Gets the row from the table and prints the row with its TTL value.
*/
// Include nosqldb-oraclejs module
var nosqldb = require('nosqldb-oraclejs');
var Types = nosqldb.Types;
// Create a configuration object
var configuration = new nosqldb.Configuration();
configuration.proxy.startProxy = true;
configuration.proxy.host = 'localhost:5010';
configuration.storeHelperHosts = ['localhost:5000'];
configuration.storeName = 'kvstore';
// Set a writeOptions object:
var writeOptions =
new Types.WriteOptions(
new Types.Durability(
Types.SyncPolicy.NO_SYNC,
Types.ReplicaAckPolicy.ALL,
Types.SyncPolicy.NO_SYNC),
1000);
// Set a readOptions object:
var readOptions =
new Types.ReadOptions(
Types.SimpleConsistency.NONE_REQUIRED,
1000);
// Create a store with the specified configuration
var store = nosqldb.createStore(configuration);
var TABLE_NAME = 'ttl_table';
store.open(function (err) {
if (err)
throw err;
console.log('Connected to the store: ' +
configuration.storeName + ' at ' +
configuration.storeHelperHosts);
// Create a table
store.execute(' CREATE TABLE IF NOT EXISTS ' + TABLE_NAME +
' ( id long, name string, PRIMARY KEY(id) ) ', function (err) {
if (err) return;
store.refreshTables(function (err) {
if (err) return;
console.log('Created table ' + TABLE_NAME);
var row = {id: 1, name: 'John Doe'};
// set updateTTL on WriteOptions
writeOptions.updateTTL = true;
console.log('Inserting row with TTL: ' + util.inspect(row));
row.ttl = new Types.TimeToLive(42, Types.TimeUnit.HOURS);
store.put(TABLE_NAME, row, writeOptions,
function (err) {
if (err)
throw err;
else {
// This is the primary key
var pKey = {id: 1};
store.get(TABLE_NAME, pKey, readOptions,
function (error, result) {
console.log('Read row: ' + util.inspect(result.currentRow));
console.log('Expiration (UTC) time: ' + result.expirationTime
+ ' (' + toTTL(result.expirationTime) + ' from now)');
// closing...
store.close(function () {
console.log('Store closed, shutting down KVProxy...');
store.shutdownProxy(function (err) {
if (err)
throw err;
console.log('KVProxy off.')
}); // Shutdown
}); // Close
}); //Get
}
}); // Put
}); // RefreshTables
}); // Execute
});
function toTTL(utc) {
var duration = (utc - new Date().getTime())/1000;
var hours = ~~(duration/(60*60));
var days = ~~(hours/24);
hours = hours%24;
hours = hours + ' hour' + (hours > 1 ? 's' : '');
days = (days > 0 ? days + ' day' : '') + (days > 1 ? 's ' : ' ');
return days + hours;
}