Durability Score

A calculated probability that a given Memo will not be lost. Each [Slab] calculates and manages the Durability Score for each resident Memo This score is compared with the Memo’s Durability Target, and certain behaviors are triggered depending on whether the score is above, or below the target, and by how much.


Durability Target

The desired minimum Durability Score for a given Memo This value may be set by policy for a given entity, or defaulted by system policy.


Materialized Memo

A Materialized is a kind of Memo which directly contains a fully materialized projection of state for the relevant Object given a specific set of precursors. It also contains a Causal Reference to each of these immediate precursors, but does not need to traverse them in order to perform a state projection.

Materialized Memos are a necessary optimization in order to make the system work efficiently. They may be invalidated if non-descendent Memos are observed. Their Durability Target is conditional. The default policy is that they should be Highly Durable, unless a non-descendent, non-referenced Memo appears.

Materialized Memos may effectively be invalidated, but as with all other Memos, they are never intentionally expunged. They merely fade away when unneeded.


Memo

A single immutable message.

Properties of a Memo:

  • May specify an Object
  • Identified by the hash of their contents and precursors
  • Originated on a single Slab
  • Able to be replicated across other Slabs
  • May have a payload
  • May reference other related memos.
  • Has a Peering with its Replicas and References


Object

An Object is conceptually similar to a record in an RDBMS, however it does not really exist, or maintain state. It is simply an enumeration, and exists only as a coalescence of it’s projected Memos. The originating Memo, and any Materialized Memos for each Object specifies its Topic.


Peering

A Peering is a gossip network across the system between all copies of one or two different Memos. Each Memo participating in a peering may only be aware of a small subset of all copies of these Memo, but in aggregate, this is sufficient to create a fully-connected mesh.

There are two main types of Peering:

  1. Replica - Peering between a Memo and other copies of itself. Necessary for Durability Scoring and Durability Management.
  2. Relationship - Peering between a Memo and other referenced memos. Necessary for reference traversal


Relationship

Each Memo may point to one or more other Memos which are related. Similar to a foreign-key in an RDBMS. Relationships for a given Memo are dictated by the Model of its Topic.


Slab

An agent which possesses storage and computational facilities, and implements the core behaviors which are essential to the operation of the system. A slab is similar to what most might think of as a “node”, except that you may choose to have multiple slabs corresponding to different threads or processes.

Properties of a Slab:

  • Stores Memos for the duration of its lifetime
  • Has specific storage/network/compute quotas (MB/GB/TB+)
  • Track peering data with memo replicas (gossip, not all replicas)
  • Reports it’s approximate expected lifetime (seconds~months+) to peers
  • Calculates a Durability Score for all contained Memos
  • Push replicas of memos below durability-threshold to peers
  • Send heartbeat Memos to peer slabs
  • Recalculate replication factor reduction for stale peers
  • Accepts memo replicas from peers when below quotas
  • Evicts least recently used Memos when network/storage quotas are exceeded
  • Update peer slabs for memos leaving/entering


Topic

A Topic is similar to table in an RDBMS. Each Object specifies a Topic.