A few years ago, while working on a data surveillance project, I found that I was struggling to solve basic time-based problems. The SQL database I was using was great for storing events and attributes but aligning and aggregating them proved challenging. As a result, I set out to create a better tool for these types of problems.
What is Chronicity?
Simply put – Chronicity is a system that tracks state over time. Think of it as “timeline construction”. Additionally, it brings along helpers that allow navigation/identification/organization of “important points in time”.
How is this different?
Relational databases are very good at representing current state. However, when the need arises to view state at different points in time we end up modeling time for each entity. This results in high effort and complexity particularly when trying to tie entities together.
So why not stream processing/analytics? Products like Azure Event Hub are capable of processing and distributing large volumes of event data using a subscriber/publisher architecture. This is a perfect fit for near real-time and even short term analytics. What it doesn’t offer is long term persisted state and the tools required to explore the data.
Chronicity hopes to fill what I think is a gap by accomplishing the following capability goals:
- System for merging multiple sources of time centric data into one aligned chronological stream
- Identification of event patterns via tiered time/sequence rules
- Retrieval of last known object state at any time
- Retrieval of periods of time in which state fits specific criteria
- External and organic generation of “interesting points in time”
So what is the plan?
Chronicity is in its infancy so the only logical thing to do is to throw it into the wild. I have released (and will be releasing) source code under LGPL licensing on GitHub. There is also a docs page and soon to come “demo” of its capabilities. Feedback is appreciated!