Features

No DBMS

Data layer management occurs at runtime for scripted or hybrid applications. There is no database management system running as a background process.

Rapid Prototyping

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.

Simple Implementation

Include data layer management into your projects with simple language-specific includes. eg.
<script src="VXSN.js.min"></script>

Extensible

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.

Introduction

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:

  • 1:1 in-memory or persistent warehousing of node-trees;
  • In-memory transactions with persistent commit;
  • Node-tree authentication, authorization and distribution;
  • Document->index and Index->document linking and unlinking for deep delete;
  • Asymmetric key encryption for requests, responses and persistent index, record or warehouse storage.

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.

  • Directory Tree
  • Javascript
  • PHP

Directory Tree

/data/
/data/aab/
/data/aab/Document.json { document aab }
/data/aab/aab/
/data/aab/aab/Document.json { document aab.aab }

Javascript

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 }

PHP

$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.

Example Usage

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"
}
  • Start
  • Create
  • Read
  • Update
  • Delete

PHP

Prepare autoloader for Vxsn namespace and instantiate an object

$example = new \Vxsn\Document;

Javascript

Include VXSN.js.min in your project HTML and inherit an object

var example = Object.create(Vxsn);

PHP

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');

Javascript

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');

PHP

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 . '!');

Javascript

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 + '!');

PHP

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);

Javascript

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);

PHP

Delete document ID aab.aab

$example->delete('aab');

Javascript

Delete document ID aab.aab

example.Document.delete('aab');