What is Jazz (part 2) - Introduction to the different types of containers

Introducing Container

A Container is a Service to manage Jazz blocks. All Jazz blocks are managed some descendant of the main Container class.

Container provides a neat API for all descendants, including:

  • Transparent thread safety .enter_read() .enter_write() .leave_read() .leave_write() .lock_container() .unlock_container()
  • Allocation: .new_block(), .destroy_transaction()
  • CRUD (Create/Read/Update/Delete): .get(), .locate(), .header(), .new_entity(), .put(), .remove(), .copy()
  • CORE (Function execution API): .exec() and .modify()
  • Support for container names in the API .base_names()
  • A configuration style for all descendants

The CRUD has two forms, the “easy” API where things are described ina string and the “native” API where that string is parsed into its constituents. This may include commands and many things that are full described in API

  • See C++ ref Container
  • See the programming reference document on how Containers are used here

Introducing Channels

Channels is a container doing block transactions across media (files, folders, the bash shell, http urls and zeroMQ servers). This includes keeping a cluster of Jazz nodes as a whole where every node is aware of all the others and queries can be forwarded by just including the node name. Any imaginable communication channel, including writing files and pushing them to github (using git in the bash shell) is accessible. This includes all protocols supported by zeroMQ and libCURL.

Introducing Volatile

Volatile is a Service to manage data objects in RAM. This includes:

  • A deque is a double linked list accessible as a key-value store.
  • Index objects that are serialized as tuples and exposed via API to allow connecting everything to everything as a graph.
  • A priority queue is implemented as self balanced binary trees with a maximum number of nodes.
  • A tree that can be navigated through commands and through keys, that implements pruning and more.

  • See C++ ref Volatile

Introducing Persisted

Persisted blocks are blocks stored using LMDB in the Jazz process.


Previous …         Next …
Blocks, Kinds, Tuples         APIs and Spaces