A distributed, eventually consistent CRDT set implementation for timestamped events, built on Redis.
Roshi is a distributed system that implements a Last-Writer-Wins element set CRDT for storing timestamped events. It provides a scalable, eventually consistent index for time-series data, designed to handle large datasets across multiple Redis instances without requiring consensus protocols. It solves the problem of high-performance event storage in critical request paths, such as activity streams.
Developers and architects building large-scale, fault-tolerant systems that need to index and query timestamped events, particularly those requiring high availability and partition tolerance.
Developers choose Roshi for its simplicity, leveraging CRDT semantics to avoid complex consensus algorithms, and its performance as a distributed layer on Redis. Its stateless design and built-in read-repair make it robust for scalable event indexing.
Roshi is a large-scale CRDT set implementation for timestamped events.
Uses LWW-element-set CRDT semantics to ensure data convergence without complex consensus protocols, making operations associative, commutative, and idempotent as described in the theory section.
Shards data across Redis clusters and replicates it in farms, providing partition tolerance and high availability with stateless, 12-factor compliant servers for easy horizontal scaling.
Designed to sit in critical request paths, offering fast Insert/Delete/Select API for timestamped events, optimized for scalability and low latency in use cases like activity streams.
Detects and repairs inconsistencies across replicas during read operations, promoting data convergence without active consensus, as explained in the replication and farm packages.
Does not support elasticity; sharding configuration is static and cannot be changed during operations, hindering dynamic scalability adjustments.
Explicitly admits potential data loss, especially on unread keys, and warns against using it as a source of truth, making it risky for critical storage.
Relies on correct client timestamps; incorrect timestamps can cause data to never appear or always override other values, leading to consistency issues.
Scalable datastore for metrics, events, and real-time analytics
An embedded key/value database for Go.
groupcache is a caching and cache-filling library, intended as a replacement for memcached in many cases.
An in-memory key:value store/cache (similar to Memcached) library for Go, suitable for single-machine applications.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.