The Relational Blackboard (RBB) is an open-source (BSD) implementation of the Blackboard concept
for temporal information. It allows components of an application to:
- Persistently store discrete Events and time-varying Timeseries data (such as the position of a moving object over time).
- Selectively retrieve information by a simple Tagging system.
- Receive notifications whenever new data with a specific set of tags is received or updated (event-driven processing).
- Find sequences of events matching specified patterns.
- Find combinations of related co-occurring events.
- Interpolate sets of timeseries at specified times to create snapshot estimates of system state.
- User-defined Time Coordinates to handle situations in which data are stored in different units of time (e.g. some in POSIX time, and others in milliseconds since device power-on), and querying each event in a different time-frame of reference based on its tag values (e.g. "all cars made between 2004 and 2007" vs "all cars currently 10-12 years old").
A main objective of RBB is high performance, so applications can deeply leverage the blackboard concept (instead of retrieving long-lived local copies of data for processing). RBB is implemented on the H2 Relational Database, which provides persistence and location transparency. The features of RBB include:
- Client applications may be written in a mix of languages, from Java-free (through SQL or command-line interfaces) to pure Java.
- Selective, (nearly) transparent client-side mirroring of Event and Timeseries data.
- Data is stored exactly as it is received; resampling is performed on demand during retrieval.
- Creating an RBB in an H2 database does not preclude normal (non-RBB) use of the same database.
- Support for single-threaded applications, or multiple process applications on multiple hosts.
- Offline (query-based) or online (event-driven) programming models.
- Data sets ranging from nonpersistent in-memory to larger-than-RAM.
- Does not dictate the 'outer loop' (top level of control) in a program.
Imagine you have a database of soccer games. For each game you have the position and identity of each player and the ball over time. You might want to find events such as:
- Find every time Player 7 touched the ball.
- Find "give-and-go" plays - a player passes to a teammate who then passes it back to that same player.
- The average distance between each player and the ball.
This example is developed on the Soccer Example
- RBB provides data storage, retrieval, and event-driven processing - its aim is to facilitate easy integration with external data analysis packages through SQL, Matlab, Java, and command-line utilities. It has no external dependencies other than the H2 jar file.
- RBB UI provides graphical display of data from an RBB, including a time-based drawing panel and a timeline of discrete events. The displays are dynamic (they change when the data changes). The display components may be executed dynamically (from the command line) or integrated into larger graphical user interfaces.
- RBB ML integrates the RBB with the Sandia Cognitive Foundry machine learning library, for making predictions based on data in an RBB using algorithms such as nearest neighbor, decision tree induction, support vector machines, and linear regression. Predictions can be triggered by the existence of sufficient sets of independent variables.