Known Tech Choices
Tradeoffs
It's a key value store with that favors availability and scalability over consistency and isolation
Programming:
- Java
Components
- Request coordination (Load balancing)
- Membership and failure detection
- Local persistence engine (DB engine)
Overly simplified look:
Request → Load balaning coordinators → Request fans out to nodes based on hash of the key → DB engine
Membership software runs on each of the node as background tasks.

Architectural Components
- Java NIO Channels to communicate between nodes https://javapapers.com/java/java-nio-channel/
- SEDA architecture for request coordination/load balancing https://en.wikipedia.org/wiki/Staged_event-driven_architecture
DB Engines
It's a pluggable architecture, but those are mentioned in [1]
- Berkeley Database (BDB) Transactional Data Store2
- BDB Java Edition
- MySQL
Data structures
- Vector Clocks → to version the data (https://en.wikipedia.org/wiki/Vector_clock)
- Merkle Trees → Synchronizing divergent replicas in the background.
Techniques

Known People
Papers
Timeline
