Data layer management occurs at runtime for scripted or hybrid applications. There is no database management system running as a background process.
Work with data as you would when developing your application using arrays, indexed arrays, and objects in addition to basic data types as they are directly retrieved from the data layer.
Include data layer management into your projects with simple language-specific includes. eg.
<script src="VXSN.js.min"></script>
Relations between data nodes can be inferred or expressed and stored as JSON-formatted plain text files mirroring the in-memory object structure on the file system.
VXSN is an implementation-specific abstraction of a database engine that is particularly suited to public cloud computing and storage for quickly prototyping web-based applications and web properties where reads exponentially outnumber writes. VXSN is designed to utilize zero compute resources on idle. There is no database engine consuming compute resources. The following diagram illustrates an example deployment with acl-filtered data layer redundancy to a public cloud service.
VXSN was developed to eschew traditional database management systems with a focus on ensuring: 1) entity-relation data could be stored with little or no compute resource utilization when data requests are idle; 2) node-trees could scale limited only by storage capacity; 3) that developers could use familiar programming syntax based on the language deployed.
VXSN is currently being extended to support:
All data is stored as plain-text files in a node-tree structure. Data consists of document, index, and warehouse objects. These objects are assigned unique hierarchical alpha identifiers. The image below illustrates a high-level overview of this structure.
The the tabs below outline an example data layer that is consistent in its object access.
/data/ /data/aab/ /data/aab/Document.json { document aab } /data/aab/aab/ /data/aab/aab/Document.json { document aab.aab }
var example = Object.create(Vxsn); example.data = { root object } example.data.aab = { key } example.data.aab.Document = { document aab } example.data.aab.aab = { key } example.data.aab.aab.Document = { document aab.aab }
$example = new \Vxsn\Document; $example->data = { root object } $example->data->aab = { object key } $example->data->aab->Document = { document aab } $example->data->aab->aab = { object key } $example->data->aab->aab->Document = { document aab.aab }
VXSN is currently available as a collection of PHP classes or Javascript objects. Document, Index, and Warehouse classes (Javascript: objects) support create, read, update, delete (CRUD), and object-specific functions. Ports for other languages and platforms are currently being investigated. A PHP-RPC interface and NodeJS support are currently in progress as is the transition from Javascript prototype-based inheritence to Javascript classes.
The following tabs are divided into a left column representing examples authored using PHP and the right column with examples authored using Javascript. All examples are for the Document class (PHP) or object (Javascript). Document read() assumes ID aab.aab.aab was referenced from "VXSN Contributors" within an Index object. These 3 node IDs are concatenated in an ordered heirarchy to create one unique document ID aab.aab.aab.
{ "VXSN Contributors": "aab.aab.aab", "VXSN Users": "bab.aab.aab", "VXSN Developers": "cab.aab.aab" }
Prepare autoloader for Vxsn namespace and instantiate an object
$example = new \Vxsn\Document;
Include VXSN.js.min in your project HTML and inherit an object
var example = Object.create(Vxsn);
Create root node Document at data
$example->data->Document->name = 'VXSN'; $example->data->Document->location = 'Los Angeles'; $example->data->Document->state = 'CA';
Create and store as root node ID
$example->create();
Create child node Document for parent node ID aab
$example->data->Document->first = 'VXSN'; $example->data->Document->last = 'Contributors';
Create and store as child node to parent aab
$example->create('aab');
Create root node Document at data
example.data.Document.name = 'VXSN'; example.data.Document.location = 'Los Angeles'; example.data.Document.state = 'CA';
Creates and store as root node ID
example.Document.create();
Create child node Document for parent node ID aab
example.data.Document.first = 'VXSN'; example.data.Document.last = 'Contributors';
Create and store as child node to parent aab
example.Document.create('aab');
Read node data from storage tree DATA
$example->read('aab.aab.aab');
Echo "Hello VXSN Contributors!"
echo 'Hello ' . $example->data->aab->aab->Document->first . ' ' . $example->data->aab->aab->Document.last . '!');
Read node data from localStorage object data
example.Document.read('data');
Write "Hello VXSN Contributors!"
document.write('Hello ' + example.data.aab.aab.Document.first + ' ' + example.data.aab.aab.Document.last + '!');
Update document ID aab.aab
$example->data->Document->first = 'VXSN'; $example->data->Document->last = 'Contributors'; $example->data->Document->title = 'Developers'; $example->data->Document->info = 'https://github.com/';
Read aab.aab, update existing Document by key, and store aab.aab
$example->update('aab.aab');
Replace existing aab.aab with Document and store aab.aab
$example->update('aab.aab', 1);
Update document ID aab.aab
example.data.Document.first = 'VXSN'; example.data.Document.last = 'Contributors'; example.data.Document.title = 'Developers'; example.data.Document.info = 'https://github.com/';
Read aab.aab, update existing Document by key, and store aab.aab
example.data.update('aab.aab');
Replace existing aab.aab with Document and store aab.aab
example.data.update('aab.aab', 1);
Delete document ID aab.aab
$example->delete('aab');
Delete document ID aab.aab
example.Document.delete('aab');