RION - Raw Internet Object Notation
RION is as fast, compact, versatile, binary data format designed for data exchange in distributed systems. RION is versatile enough that it can also be used as a data storage format.
By fast data format I mean that RION is fast to read and write (deserialize and serialize) for the communicating nodes. RION can even be traversed in its binary form if you need maximum speed.
By compact data format format I mean that it requires a low amount of bytes to represent the encoded data. Fewer bytes requires less network bandwidth and can thus be transferred faster across the network. A compact data format is also an advantage when reading and writing it.
By versatile data format I mean a data format that can be used for as many use cases as possible. This minimizes your need for finding or inventing other data formats.
RION was designed with exactly these goals in mind. In fact, we had several other design goals for RION. These are described in the text RION Design Goals.
RION by Nanosai
RION was created by Nanosai, a distributed systems R&D company that I am a cofounder and lead architect of.
RION Renamed From ION
RION was originally launched using the name ION - but about a year later Amazon released a similar data format also called ION. After a while we decided to rename our ION format to RION, to distinguish between the two.
Although Amazon's ION format is similar in encoding to our RION format, we do not think Amazon copied our ION format and tried to "steal" the name. Here is why: After we published our ION format the first time, someone told us that Amazon had an internal data format with the name ION. However, since Amazon had not released it, we continued with the name ION. However, about a year later Amazon released their ION format - so after some time we decided to change name to RION.
RION Ops for Java - A Toolkit for RION
RION Ops for Java is an open source Java toolkit for reading and writing RION. RION Ops provides a few different ways to work with RION.
RION in IAP
IAP is a message oriented network protocol designed to be a fast, compact, versatile, binary network communication protocol for application communication. We designed RION especially as a message and default data format for IAP. Thus, all IAP messages are encoded using RION.
To read more about IAP go to the IAP Specification.
RION in Stream Ops
RION is also used as the record encoding in our data streaming engine named Stream Ops for Java. Stream Ops provides an embeddable data streaming engine similar to an embeddable version of Apache Kafka or Apache Pulsar.
Being a general purpose data format, RION can be used independently of IAP and Stream Ops. You can use RION as a data format in data files, log files, as data format for binary messages transmitted over HTTP, as encoding for microservice requests and responses etc.
RION can contain binary data so you can also embed other formats inside RION when necessary. For instance, an MP3 file, ZIP file, JPG file etc.
RION is a Binary Format
RION uses a binary encoding to make it faster to read and write, more compact, and to make it possible to embed binary data. RION's encoding is described in the text RION Encoding.
RION vs. Other Data Formats
RION is a data format which is similar to a binary version of JSON. In that respect RION is similar to MessagePack, CBOR and Amazon's ION but with a few minor, beneficial differences.
We have a more detailed description of how RION compares to other data formats in the text RION vs. Other Formats.
Since RION is similar in encoding to MessagePack, CBOR and Amazon's ION, we expect the read and write speeds to be comparable to that of these formats. We have made some comparisons already with Jackson's MessagePack and CBOR implementations and they confirm this expectation. You can see the results of this comparison in the text RION Performance Benchmarks.
However, RION is still different in a few areas than these data formats, and for the use cases that utilize these differences, the benefits can be big.