rngo

Reference

Pricing

Metered billing in rngo is based upon simulation volume. At the end of each billing period, usage equals the aggregate volume of all simulations run within that period.

Simulation Volume

A simulation's volume is the sum of each stream's volume, which is calculated by taking the product of:

  1. stream length - the maximum number of events that the stream could produce given the simulation specs.
  2. schema width - the number of bytes required to store the largest value described by the stream's schema.

The volume is this number rounded up to the next megabyte.

Stream Length

A stream's length is the maximum number of events that the stream could produce given the simulation specs.

Fixed Rate

If the stream has a fixed rate, the length is the rate multiplied by the simulation duration in seconds.

Variable Rate

If the stream has a variable rate, the length is calulated by partitioning the domain of the function and summing the maximum of each partition's upper- and lower-bound rate.

See the Streams reference for more on rates.

Schema Width

A schema's width is the number of bytes required to store the largest value described by the schema.

Null

A null schema's width is 1.

Boolean

A boolean schema's width is 1.

Integer

An integer schema's width is large enough to fit it's upper bound. For example, the following schema has width 3:

type: integer
maximum: 65600

The width must also accommodate the lower bound - this schema also has width 3:

type: integer
minimum: -65600
maximum: 128

Upper and lower bounds may also be derived from the exclusiveMinimum, exclusiveMaximum, enum and const keywords, along with from rngo value expressions.

If no bounds are specified, we use a default minimum of -2147483648 and a maximum of 2147483647, so the following schema has a width of 4:

type: integer

Number

A number schema's values are represented as integers, with the 4 least significant digits representing the fractional part. So the following schema has a width of 3:

type: number
minimum: 0
maximum: 32

This is because the largest possible value is represented as 320000, which requires 3 bytes. This schema has width of 4 to accomodate the integer 20458900:

type: number
minimum: -2045.89
maximum: 32

String

A string schema's width is the length of the longest possible string multiplied by 4, so this schema has a width of 80:

type: string
maxLength: 20

If a string has an enum (or a const), the width will be the item with the most bytes. For example, this schema has length 5:

type: string
enum:
  - one
  - two
  - three

The width may also be derived from the pattern and format keywords, along with from rngo value expressions.

If no keywords are specified, we use a default maxLength value of 64, meaning ther following schema has a width of 256:

type: string

Array

An array schema's width is the maximum length of the array times the size of its items. So the following schema has a width of 5:

type: array
items:
  type: integer
  minimum: 0
  maximum: 128
maxItems: 5

If maxItems is not specified, we use a default value of 64

Object

An object schema's width is the sum of the width of its values. This schema has a width of 19:

type: object
properties:
  id:
    type: integer
    mimum: 0
    maximum: 512
  name:
    type: string
    maxLength: 4
  admin:
    type: boolean

Widths are calculated recursively, so the following schema has a width of 127:

type: object
properties:
  id:
    type: integer
  posts:
    type: array
    items:
      type: object
      properties:
        title:
          type: string
          maxLength: 10
        published:
          type: boolean
    maxItems: 3
Previous
Expressions