Skip to the content.

What is RODB?

RODB is a fast and configurable tool to create micro-services from static data files.

It currently supports input files as CSV, XML and JSON, and can create JSON APIs from it.

It also handles parsing and indexing the data.

Architecture

Input
Reads and parses data from a given file and format, and returns a stream of records.
Input...
Parser
Formats and converts raw field values to another type.
Parser...
Index
Takes and indexes the records given by the Inputs, and provides
advanced searching and filtering capabilities
Index...
Service
Serves the given Outputs to the users using a specified protocol
Service...
Output
Queries the Indexes with any given parameters, and transforms
the resulting records to a specified format
Output...
CSV
CSV
XML
XML
JSON
JSON
JSON Array
JSON Array
HTTP
HTTP
Map
Map
Integer
Integer
Float
Float
String
String
JSON
JSON
Bool
Bool
Split
Split
Date*
Date*
SQLite
SQLite
FTS5
FTS5
NoOp
NoOp
Wildcard
Wildcard
Websocket*
Websocket*
GRPC*
GRPC*
JSON Object
JSON Object
Socket.IO*
Socket.IO*
JSON API*
JSON API*
CSV*
CSV*
GraphQL*
GraphQL*


Elastic
Search*

Elastic...
Bleve*
Bleve*
TSV*
TSV*
FTP*
FTP*
* = Not implemented yet
* = Not implemented yet
Viewer does not support full SVG 1.1

Getting started

RODB is available as a docker image at ghcr.io/rodb-io/rodb:0.0.0.

Several advanced examples are also available here here.

As a very basic starter, this script creates and runs an API:

mkdir -p ./rodb-sample && echo "
inputs:
  - name: days
    type: csv
    path: /sample/days.csv
    ignoreFirstRow: true
    autodetectColumns: true
outputs:
  - name: days
    type: jsonArray
    input: days
services:
  - name: server
    type: http
    http:
      listen: ':8080'
    routes:
      - path: '/'
        output: days
" > ./rodb-sample/rodb.yaml
echo -e "day\nMonday\nTuesday\nWednesday\nThursday\nFriday\nSaturday\nSunday" > ./rodb-sample/days.csv
docker run --rm -it -p 8080:8080 -w /sample -v $PWD/rodb-sample:/sample ghcr.io/rodb-io/rodb:0.0.0

Command line flags

The following arguments are available:

Configuration file structure

The configuration file allows to set-up each layer separately. Every component has a name and a type.

The name must be unique among each layer (you can not have two parsers named foo, but you can have a foo parser and a foo index).

You can find all the available component types and configuration settings in the documentation.

parsers:
  - name: someParser
    type: integer
    ...
  - name: anotherParser
    type: float
    ...
inputs:
  - name: someInput
    type: xml
    ...
  - name: anotherInput
    type: csv
    ...
indexes:
  - name: someIndex
    type: sqlite
    ...
  - name: anotherIndex
    type: fst5
    ...
outputs:
  - name: someOutput
    type: jsonArray
    ...
  - name: anotherInput
    type: jsonObject
    ...
services:
  - name: someService
    type: http
    ...
  - name: anotherService
    type: http
    ...

The configuration file structure is also provided as a JSON-schema here.