Skip to content

dynamic protobuf implimentation for structured table data

Notifications You must be signed in to change notification settings

mappazzo/protobuf-table

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

protobuf-table

A dynamic protobuf implementation for structured table data

software by mappazzo

Basic tests and compression protocol tested and working. Detailed documentation under development... Stay tuned

Purpose

License

This software is 'Beerware'

"THE BEER-WARE LICENSE" (Revision 42): Mappazzo wrote this file. As long as you retain this notice you can do whatever you want with this stuff. If we meet some day, and you think this stuff is worth it, you can buy me a beer in return. Cheers, Kelly Norris

Basic Usage

Structure your table data as object with an array of headers 'header' and an array of 'data'. Each 'data' entry array can be an object with keys corresponding to each name in the header or an array. You can also include metadata information in a 'meta' object.

Example 'Table' structure (with data as an Array):

var table = {
  meta: {
    filename: 'exampleTable',
    owner: 'mappazzo',
    link: 'www.mappazzo.com',
    comment: 'basic table example'
  },
  header: [
    { name: 'location', type: 'string' },
    { name: 'total', type: 'uint' },
    { name: 'latitude', type: 'float' },
    { name: 'longitude', type: 'float' },
    { name: 'reading', type: 'int' }
  ],
  data: [
    ['east street', 34324, -42.559355, 172.60347, -889],
    ['work', 7344, -41.546799, 172.50742, 4],
    ['big tree', 9327924, -41.79346, 173.04213, 32]
  ]
}

You can encode this data as follows:

pbTable.encodeTable(table, function (err, buffer) {
    if(err) return console.log(err)
    console.log('success, buffer is:' + buffer.length + 'bytes')
})

or..  pbTable.encode((table, function (err, buffer) { } )

And decode the resulting buffer as follows:

pbTable.decodeTable(buffer, function (err, table) {
    if(err) return console.log(err)
    console.log('success, restored data:', table)
})

or...  pbTable.decode((table, function (err, buffer) { } )

Each 'row' of data can also be a verbose object

data: [
  { location: 'east street', total: 34324, latitude: -42.559355, .... },
  { location: 'work', .... },
  ...
]

If data is stored as verbose objects then we use:

pbTable.encodeVerbose(buffer, callback (err, buffer) { } )

and...   pbTable.decodeVerbose(buffer, callback (err, buffer) { } )

We can also add additional data to an existing buffer

pbTable.add(buffer, data, callback (err, buffer) { } )
...
pbTable.addTable(buffer, data, callback(err, buffer) { } )
pbTable.addVerbose(buffer, data, callback (err, buffer) { } )

Data extraction

We can get an individual row of our data directly from the buffer. We provide the buffer and a 'request'. The request represents the 'table row numbers' that you want returned and can be a single an integer or an Array of integers.

pbTable.get(buffer, request, callback(err, data) { } )
...
pbTable.getTable(buffer, request, callback(err, data) { } )
pbTable.getVerbose(buffer, request, callback(err, data) { } )

Compressing data

We can making use of Proto Buffers integer compression by transforming structured data via offset, multiplication and sequencing.

Transform your 'float' and 'int' data using inbuilt data transformation

header: [
  {
    name: 'latitude',
    type: 'int',
    transform: {
      offset: -42.2454,
      decimals: 4,
      sequence: true
    }  
  },
  {
    name: 'longitude',
    type: 'int',
    transform: {
      offset: 173.9302,
      multip: 10000,
    }  
  },
  ...
]

more examples and documentation coming......

Installation

For packaging with NPM and ES6

npm install --save protobuf-table

and then:

include pbTable from 'protobuf-table'

Stand alone

var pbTable = require('./dist/pbTable-min.js')

Building and Testing

Build

npm run build

Build and test

npm run test

About

dynamic protobuf implimentation for structured table data

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published