JaguarDB

Jaguar is a distributed NoSQL DBMS that stores data as a flat array containing fixed-length records. In each record, there is a key and a value (can have many columns). It supports standard SQL commands, fast scale out and spatial data types. It is used for data storage, data analytics and business forecasting in the IOT era.

Storage Model

Custom

Each table is a flat array containing fixed-length records. Each record has a key which can be a composite key, and a value which may include multiple columns.

The array is called "Sorted Elastic Array (SEA)". The array maintains the invariant that it should be at least 30% sparse (at least 30% of the array space is unoccupied). As more and more elements are added to the array and the sparse ratio is no longer bigger than 30%, the array will be resized. During the array resizing, a new longer array will be created and all the existing elements in the old array will be copied to the new one with enough spacing between any 2 adjacent elements.

For each table, all the keys are stored in one big "Sorted Elastic Array". The array is cut into multiple blocks and there is a block meta table that has pointers to each block's starting index in the SEA.

Logging

Physical Logging

Jaguar servers log client activities and table management history to disk.

Query Interface

SQL

Jaguar provides a set of built-in functions that can be used in SQL commands. Standard SQL commands are also supported including create/drop table and index, load table, insert/delete record, select, join, update, group by, aggregation.

It also supports schema change: when table is created, 30% extra space is allocated to allow users to add new columns if extra space is big enough to hold the new columns. Otherwise the table is dropped and recreated with new columns.

Jaguar supports libraries including JDBC and has API for Python, PHP, etc.

It also supports querying spatial data attributes (e.g. select all circles that have x-coordinate > 5). API provided include built-in functions like Distance() that computes distance between two arbitrary geometric shapes.

Data Model

Key/Value

Jaguar is key-value store that supports SQL. Each table is a flat array containing fixed-length records. Each record has a key which can be a composite key, and a value which may include multiple columns.

The data types supported include standard types like int, float, strings and also range, file and spatial data types. Spatial data type are values can be a parameterized geometric shape (e.g. Circle(center=Point(1,3), radius=2))

Foreign Keys

Supported

Join operations can be performed on any column (including key column) in any table.