qminer
Version:
A C++ based data analytics platform for processing large-scale real-time streams containing structured and unstructured data
870 lines (863 loc) • 34 kB
HTML
<html>
<head>
<meta name="generator" content="JSDoc 3">
<meta charset="utf-8">
<title>Class: Base</title>
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
<link href="css/baseline.css" rel="stylesheet">
</head>
<body onload="prettyPrint()">
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
<div id="jsdoc-navbar-container">
<div id="jsdoc-navbar-content">
<a href="index.html" class="jsdoc-navbar-package-name">QMiner JavaScript API v9.4.0</a>
</div>
</div>
</nav>
<div id="jsdoc-body-container">
<div id="jsdoc-content">
<div id="jsdoc-content-container">
<div id="jsdoc-main" role="main">
<header class="page-header">
<div class="symbol-detail-labels"><span class="label label-kind">class</span> <span class="label label-static">static</span></div>
<h1><small><a href="module-qm.html">qm</a>.<wbr></small><span class="symbol-name">Base</span></h1>
<p class="source-link">Source: <a href="qminerdoc.js.html#source-line-363">qminerdoc.<wbr>js:363</a></p>
<div class="symbol-classdesc">
<p>Represents the database and holds stores.</p>
</div>
<dl class="dl-compact">
</dl>
</header>
<section id="summary">
<div class="summary-callout">
<h2 class="summary-callout-heading">Methods</h2>
<div class="summary-content">
<div class="summary-column">
<dl class="dl-summary-callout">
<dt><a href="module-qm.Base.html#close">close()</a></dt>
<dd>
</dd>
<dt><a href="module-qm.Base.html#createStore">createStore(storeDef[, storeSizeInMB])</a></dt>
<dd>
</dd>
<dt><a href="module-qm.Base.html#garbageCollect">garbageCollect([max_time])</a></dt>
<dd>
</dd>
<dt><a href="module-qm.Base.html#getStats">getStats()</a></dt>
<dd>
</dd>
<dt><a href="module-qm.Base.html#getStoreList">getStoreList()</a></dt>
<dd>
</dd>
</dl>
</div>
<div class="summary-column">
<dl class="dl-summary-callout">
<dt><a href="module-qm.Base.html#getStreamAggr">getStreamAggr(saName)</a></dt>
<dd>
</dd>
<dt><a href="module-qm.Base.html#getStreamAggrNames">getStreamAggrNames()</a></dt>
<dd>
</dd>
<dt><a href="module-qm.Base.html#getStreamAggrStats">getStreamAggrStats()</a></dt>
<dd>
</dd>
<dt><a href="module-qm.Base.html#isClosed">isClosed()</a></dt>
<dd>
</dd>
<dt><a href="module-qm.Base.html#isStore">isStore(name)</a></dt>
<dd>
</dd>
</dl>
</div>
<div class="summary-column">
<dl class="dl-summary-callout">
<dt><a href="module-qm.Base.html#loadCSV">loadCSV(opts[, callback])</a></dt>
<dd>
</dd>
<dt><a href="module-qm.Base.html#partialFlush">partialFlush([window])</a></dt>
<dd>
</dd>
<dt><a href="module-qm.Base.html#search">search(query)</a></dt>
<dd>
</dd>
<dt><a href="module-qm.Base.html#store">store(name)</a></dt>
<dd>
</dd>
</dl>
</div>
</div>
</div>
</section>
<section>
<h2 id="Base">new <span class="symbol-name">Base</span><span class="signature"><span class="signature-params">(paramObj)</span></span></h2>
<p>Base</p>
<section>
<h3>
Example
</h3>
<div>
<pre class="prettyprint"><code>// import qm module
var qm = require('qminer');
// using a constructor, in open mode
var base = new qm.Base({ mode: 'open' });
base.close();</code></pre>
</div>
</section>
<section>
<h3>Parameter</h3>
<table class="jsdoc-details-table">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Optional</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p>paramObj</p>
</td>
<td>
<p><a href="module-qm.html#~BaseConstructorParam">module:qm~BaseConstructorParam</a></p>
</td>
<td>
<p> </p>
</td>
<td>
<p>The base constructor parameter object.</p>
</td>
</tr>
</tbody>
</table>
</section>
<dl class="dl-compact">
</dl>
</section>
<section>
<h2>Methods</h2>
<section>
<h3 id="close"><span class="symbol-name">close</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> null</span></span></h3>
<p>Closes the database.</p>
<section>
<h4>
Example
</h4>
<div>
<pre class="prettyprint"><code>// import qm module
var qm = require('qminer');
// using a constructor, in open mode
var base = new qm.Base({ mode: 'open' });
// close the database
base.close();</code></pre>
</div>
</section>
<dl class="dl-compact">
<dt>Returns</dt>
<dd>
<p><code>null</code>B No value is returned.</p>
</dd>
</dl>
<h3 id="createStore"><span class="symbol-name">createStore</span><span class="signature"><span class="signature-params">(storeDef[, storeSizeInMB])</span> → <span class="signature-returns"> (<a href="module-qm.Store.html">module:qm.Store</a> or Array of <a href="module-qm.Store.html">module:qm.Store</a>)</span></span></h3>
<p>Creates a new store.</p>
<section>
<h4>
Example
</h4>
<div>
<pre class="prettyprint"><code>// import qm module
var qm = require('qminer');
// create a new base with one store
var base = new qm.Base({
mode: "createClean",
schema: [
{
name: "Superheroes",
fields: [
{ name: "Name", type: "string" },
{ name: "Superpowers", type: "string_v" },
{ name: "YearsActive", type: "int" }
]
}]
});
// create a new store called "Supervillains" in the base
base.createStore({
name: "Supervillians",
fields: [
{ name: "Name", type: "string" },
{ name: "Superpowers", type: "string_v" },
{ name: "YearsActive", type: "int" }
]
});
// create two new stores called "Cities" and "Leagues"
base.createStore([
{
name: "Cities",
fields: [
{ name: "Name", type: "string", primary: true },
{ name: "Population", type: "int" }
]
},
{
name: "Leagues",
fields: [
{ name: "Name", type: "string" },
{ name: "Members", type: "string_v" }
]
}
]);
base.close();</code></pre>
</div>
</section>
<section>
<h4>Parameters</h4>
<table class="jsdoc-details-table">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Optional</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p>storeDef</p>
</td>
<td>
<p>Array of <a href="module-qm.html#~SchemaDef">module:qm~SchemaDef</a></p>
</td>
<td>
<p> </p>
</td>
<td>
<p>The definition of the store(s).</p>
</td>
</tr>
<tr>
<td>
<p>storeSizeInMB</p>
</td>
<td>
<p>number</p>
</td>
<td>
<p>Yes</p>
</td>
<td>
<p>The reserved size of the store(s).</p>
<p>Defaults to <code>1024</code>.</p>
</td>
</tr>
</tbody>
</table>
</section>
<dl class="dl-compact">
<dt>Returns</dt>
<dd>
<p><code>(<a href="module-qm.Store.html">module:qm.Store</a> or Array of <a href="module-qm.Store.html">module:qm.Store</a>)</code>B - Returns a store or an array of stores (if the schema definition was an array).</p>
</dd>
</dl>
<h3 id="garbageCollect"><span class="symbol-name">garbageCollect</span><span class="signature"><span class="signature-params">([max_time])</span></span></h3>
<p>Calls qminer garbage collector to remove records outside time windows. For application example see <a href="module-qm.html#~SchemaTimeWindowDef">module:qm~SchemaTimeWindowDef</a>.</p>
<section>
<h4>Parameter</h4>
<table class="jsdoc-details-table">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Optional</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p>max_time</p>
</td>
<td>
<p>number</p>
</td>
<td>
<p>Yes</p>
</td>
<td>
<p>Maximal number of time each store can spend on cleaning backlog in milisecons. If -1 then no limit is applied.</p>
<p>Defaults to <code>-1</code>.</p>
</td>
</tr>
</tbody>
</table>
</section>
<dl class="dl-compact">
</dl>
<h3 id="getStats"><span class="symbol-name">getStats</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> <a href="module-qm.html#~PerformanceStatBase">module:qm~PerformanceStatBase</a></span></span></h3>
<p>Retrieves performance statistics for qminer.</p>
<section>
<h4>
Example
</h4>
<div>
<pre class="prettyprint"><code>// import qm module
var qm = require('qminer');
// create a base with two stores
var base = new qm.Base({
mode: "createClean",
schema: [
{
name: "KwikEMart",
fields: [
{ name: "Worker", type: "string" },
{ name: "Groceries", type: "string_v" }
]
},
{
name: "NuclearPowerplant",
fields: [
{ name: "Owner", type: "string" },
{ name: "NumberOfAccidents", type: "int" },
{ name: "Workers", type: "string_v" }
]
}]
});
// call the garbage collector
base.getStats();
base.close();</code></pre>
</div>
</section>
<dl class="dl-compact">
<dt>Returns</dt>
<dd>
<p><code><a href="module-qm.html#~PerformanceStatBase">module:qm~PerformanceStatBase</a></code>B The performance statistics.</p>
</dd>
</dl>
<h3 id="getStoreList"><span class="symbol-name">getStoreList</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Array of object</span></span></h3>
<p>Returns a list of store descriptors.</p>
<section>
<h4>
Example
</h4>
<div>
<pre class="prettyprint"><code>// import qm module
var qm = require('qminer');
// create a base with two stores
var base = new qm.Base({
mode: "createClean",
schema: [
{
name: "KwikEMart",
fields: [
{ name: "Worker", type: "string" },
{ name: "Groceries", type: "string_v" }
]
},
{
name: "NuclearPowerplant",
fields: [
{ name: "Owner", type: "string" },
{ name: "NumberOfAccidents", type: "int" },
{ name: "Workers", type: "string_v" }
]
}]
});
// get the list of store descriptors
var exists = base.getStoreList();
base.close();</code></pre>
</div>
</section>
<dl class="dl-compact">
<dt>Returns</dt>
<dd>
<p><code>Array of object</code>B An array of store descriptors. The store descriptor <code>storeDesc</code> contains the properties:
<br>1. <code>storeDesc.storeId</code> - The store ID. Type <code>number</code>.
<br>2. <code>storeDesc.storeName</code> - Store name. Type <code>string</code>.
<br>3. <code>storeDesc.storeRecords</code> - Number of records in store. Type <code>number</code>.
<br>4. <code>storeDesc.fields</code> - The store field schema. Type <code>Array of <a href="module-qm.html#~SchemaFieldDef">module:qm.SchemaFieldDef</a></code>.
<br>5. <code>storeDesc.keys</code> - The store key schema. Type <code>Array of <a href="module-qm.html#~SchemaKeyDef">module:qm.SchemaKeyDef</a></code>.
<br>6. <code>storeDesc.joins</code> - The store join schema. Type <code>Array of <a href="module-qm.html#~SchemaJoinDef">module:qm.SchemaJoinDef</a></code>.
</p>
</dd>
</dl>
<h3 id="getStreamAggr"><span class="symbol-name">getStreamAggr</span><span class="signature"><span class="signature-params">(saName)</span> → <span class="signature-returns"> <a href="module-qm.StreamAggr.html">module:qm.StreamAggr</a></span></span></h3>
<p>Gets the stream aggregate of the given name.</p>
<section>
<h4>
Example
</h4>
<div>
<pre class="prettyprint"><code>// import qm module
var qm = require('qminer');
// create a simple base containing one store
var base = new qm.Base({
mode: "createClean",
schema: [{
name: "People",
fields: [
{ name: "Name", type: "string" },
{ name: "Gendre", type: "string" },
]
},
{
name: "Laser",
fields: [
{ name: "Time", type: "datetime" },
{ name: "WaveLength", type: "float" }
]
}]
});
// create a new time series window buffer stream aggregator for 'Laser' store (with the JSON object)
var wavelength = {
name: "WaveLengthLaser",
type: "timeSeriesWinBuf",
store: "Laser",
timestamp: "Time",
value: "WaveLength",
winsize: 10000
}
var sa = base.store("Laser").addStreamAggr(wavelength);
// get the stream aggregate with the name 'Laser'
var streamAggr = base.getStreamAggr('WaveLengthLaser');
base.close();</code></pre>
</div>
</section>
<section>
<h4>Parameter</h4>
<table class="jsdoc-details-table">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Optional</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p>saName</p>
</td>
<td>
<p>string</p>
</td>
<td>
<p> </p>
</td>
<td>
<p>The name of the stream aggregate.</p>
</td>
</tr>
</tbody>
</table>
</section>
<dl class="dl-compact">
<dt>Returns</dt>
<dd>
<p><code><a href="module-qm.StreamAggr.html">module:qm.StreamAggr</a></code>B The stream aggregate whose name is <code>saName</code>.</p>
</dd>
</dl>
<h3 id="getStreamAggrNames"><span class="symbol-name">getStreamAggrNames</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Array of string</span></span></h3>
<p>Gets an array of the stream aggregate names in the base.</p>
<section>
<h4>
Example
</h4>
<div>
<pre class="prettyprint"><code>// import qm module
var qm = require('qminer');
// create a simple base containing one store
var base = new qm.Base({
mode: "createClean",
schema: [{
name: "People",
fields: [
{ name: "Name", type: "string" },
{ name: "Gendre", type: "string" },
]
},
{
name: "Laser",
fields: [
{ name: "Time", type: "datetime" },
{ name: "WaveLength", type: "float" }
]
}]
});
// create a new stream aggregator for 'People' store, get the length of the record name (with the function object)
var aggr = new qm.StreamAggr(base, new function () {
var length = 0;
this.name = 'nameLength',
this.onAdd = function (rec) {
length = rec.Name.length;
};
this.saveJson = function (limit) {
return { val: length };
}
}, "People");
// create a new time series window buffer stream aggregator for 'Laser' store (with the JSON object)
var wavelength = {
name: "WaveLengthLaser",
type: "timeSeriesWinBuf",
store: "Laser",
timestamp: "Time",
value: "WaveLength",
winsize: 10000
}
var sa = base.store("Laser").addStreamAggr(wavelength);
// get the stream aggregates names
var streamAggrNames = base.getStreamAggrNames();
base.close();</code></pre>
</div>
</section>
<dl class="dl-compact">
<dt>Returns</dt>
<dd>
<p><code>Array of string</code>B The array containing the stream aggregate names.</p>
</dd>
</dl>
<h3 id="getStreamAggrStats"><span class="symbol-name">getStreamAggrStats</span><span class="signature"><span class="signature-params">()</span></span></h3>
<p>Retrieves performance statistics for stream aggregates.</p>
<dl class="dl-compact">
</dl>
<h3 id="isClosed"><span class="symbol-name">isClosed</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Boolean</span></span></h3>
<p>Checks if the base is closed.</p>
<section>
<h4>
Example
</h4>
<div>
<pre class="prettyprint"><code>// import qm module
var qm = require('qminer');
// using a constructor, in open mode
var base = new qm.Base({ mode: 'open' });
// check if the base is closed
var closed = base.isClosed();
// close the database
base.close();</code></pre>
</div>
</section>
<dl class="dl-compact">
<dt>Returns</dt>
<dd>
<p><code>Boolean</code>B Returns <code>true</code>, if the base is closed.</p>
</dd>
</dl>
<h3 id="isStore"><span class="symbol-name">isStore</span><span class="signature"><span class="signature-params">(name)</span> → <span class="signature-returns"> boolean</span></span></h3>
<p>Checks if there is a store.</p>
<section>
<h4>
Example
</h4>
<div>
<pre class="prettyprint"><code>// import qm module
var qm = require('qminer');
// create a base with two stores
var base = new qm.Base({
mode: "createClean",
schema: [
{
name: "KwikEMart",
fields: [
{ name: "Worker", type: "string" },
{ name: "Groceries", type: "string_v" }
]
},
{
name: "NuclearPowerplant",
fields: [
{ name: "Owner", type: "string" },
{ name: "NumberOfAccidents", type: "int" },
{ name: "Workers", type: "string_v" }
]
}]
});
// get the "KwikEMart" store
var exists = base.isStore("KwikEMart"); // true
base.close();</code></pre>
</div>
</section>
<section>
<h4>Parameter</h4>
<table class="jsdoc-details-table">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Optional</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p>name</p>
</td>
<td>
<p>string</p>
</td>
<td>
<p> </p>
</td>
<td>
<p>Store name.</p>
</td>
</tr>
</tbody>
</table>
</section>
<dl class="dl-compact">
<dt>Returns</dt>
<dd>
<p><code>boolean</code>B True, if there exists a store with the store <code>name</code>. Otherwise, false.</p>
</dd>
</dl>
<h3 id="loadCSV"><span class="symbol-name">loadCSV</span><span class="signature"><span class="signature-params">(opts[, callback])</span></span></h3>
<p>Loads the store from a CSV file.</p>
<section>
<h4>Parameters</h4>
<table class="jsdoc-details-table">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Optional</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p>opts</p>
</td>
<td>
<p><a href="module-qm.html#~BaseLoadCSVParam">module:qm~BaseLoadCSVParam</a></p>
</td>
<td>
<p> </p>
</td>
<td>
<p>Options object.</p>
</td>
</tr>
<tr>
<td>
<p>callback</p>
</td>
<td>
<p>function()</p>
</td>
<td>
<p>Yes</p>
</td>
<td>
<p>Callback function, called on errors and when the procedure finishes.</p>
</td>
</tr>
</tbody>
</table>
</section>
<dl class="dl-compact">
</dl>
<h3 id="partialFlush"><span class="symbol-name">partialFlush</span><span class="signature"><span class="signature-params">([window])</span> → <span class="signature-returns"> number</span></span></h3>
<p>Base saves dirty data given some time window.</p>
<section>
<h4>
Example
</h4>
<div>
<pre class="prettyprint"><code>// import qm module
var qm = require('qminer');
// create a base with two stores
var base = new qm.Base({
mode: "createClean",
schema: [
{
name: "KwikEMart",
fields: [
{ name: "Worker", type: "string" },
{ name: "Groceries", type: "string_v" }
]
},
{
name: "NuclearPowerplant",
fields: [
{ name: "Owner", type: "string" },
{ name: "NumberOfAccidents", type: "int" },
{ name: "Workers", type: "string_v" }
]
}]
});
// call the garbage collector
base.partialFlush();
base.close();</code></pre>
</div>
</section>
<section>
<h4>Parameter</h4>
<table class="jsdoc-details-table">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Optional</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p>window</p>
</td>
<td>
<p>number</p>
</td>
<td>
<p>Yes</p>
</td>
<td>
<p>Length of available time window in miliseconds.</p>
<p>Defaults to <code>500</code>.</p>
</td>
</tr>
</tbody>
</table>
</section>
<dl class="dl-compact">
<dt>Returns</dt>
<dd>
<p><code>number</code>B Number of records it flushed.</p>
</dd>
</dl>
<h3 id="search"><span class="symbol-name">search</span><span class="signature"><span class="signature-params">(query)</span> → <span class="signature-returns"> <a href="module-qm.RecordSet.html">module:qm.RecordSet</a></span></span></h3>
<p>Makes a query search and returns a record set.</p>
<section>
<h4>Parameter</h4>
<table class="jsdoc-details-table">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Optional</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p>query</p>
</td>
<td>
<p><a href="module-qm.html#~QueryObject">module:qm~QueryObject</a></p>
</td>
<td>
<p> </p>
</td>
<td>
<p>Query language JSON object.</p>
</td>
</tr>
</tbody>
</table>
</section>
<dl class="dl-compact">
<dt>Returns</dt>
<dd>
<p><code><a href="module-qm.RecordSet.html">module:qm.RecordSet</a></code>B The record set that matches the search criterion.</p>
</dd>
</dl>
<h3 id="store"><span class="symbol-name">store</span><span class="signature"><span class="signature-params">(name)</span> → <span class="signature-returns"> <a href="module-qm.Store.html">module:qm.Store</a></span></span></h3>
<p>Returns the store with the specified name.</p>
<section>
<h4>
Example
</h4>
<div>
<pre class="prettyprint"><code>// import qm module
var qm = require('qminer');
// create a base with two stores
var base = new qm.Base({
mode: "createClean",
schema: [
{
name: "KwikEMart",
fields: [
{ name: "Worker", type: "string" },
{ name: "Groceries", type: "string_v" }
]
},
{
name: "NuclearPowerplant",
fields: [
{ name: "Owner", type: "string" },
{ name: "NumberOfAccidents", type: "int" },
{ name: "Workers", type: "string_v" }
]
}]
});
// get the "KwikEMart" store
var store = base.store("KwikEMart"); // returns the store with the name "KwikEMart"
base.close();</code></pre>
</div>
</section>
<section>
<h4>Parameter</h4>
<table class="jsdoc-details-table">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Optional</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p>name</p>
</td>
<td>
<p>string</p>
</td>
<td>
<p> </p>
</td>
<td>
<p>Store name.</p>
</td>
</tr>
</tbody>
</table>
</section>
<dl class="dl-compact">
<dt>Returns</dt>
<dd>
<p><code><a href="module-qm.Store.html">module:qm.Store</a></code>B The store.</p>
</dd>
</dl>
</section>
</section>
</div>
</div>
<nav id="jsdoc-toc-nav" role="navigation"></nav>
</div>
</div>
<footer id="jsdoc-footer" class="jsdoc-footer">
<div id="jsdoc-footer-container">
<p>
</p>
</div>
</footer>
<script src="scripts/jquery.min.js"></script>
<script src="scripts/tree.jquery.js"></script>
<script src="scripts/prettify.js"></script>
<script src="scripts/jsdoc-toc.js"></script>
<script src="scripts/linenumber.js"></script>
<script src="scripts/scrollanchor.js"></script>
</body>
</html>