-
Notifications
You must be signed in to change notification settings - Fork 0
Design Principles and Choices
We implement a column-oriented "table", inspired by Cassandra.
At the master site, we support MVCC (multi-version concurrency control) by using ConcurrentSkipListSet as the underlying data structure.
Each slave site only maintains the latest versions for each data items it has ever seen (propagated from the master site). This data version is accessed under the protection of a ReentrantReadWriteLock.
Clients buffer all updates of a transaction until it is about to commit.
Data is partitioned among multiple masters (and is then replicated among each master and its slaves).
[ ] TODO: We plan to support a variety of partitioning strategies.
We use the consistent hashing mechanism implemented by google/guava.
The abstract class AbstractRVSISpecification represents the RVSI specification which is a part of transaction semantics. AbstractRVSISpecification consists of three types: BVSpecification for backward view, FVSpecification for forward view, and SISpecification for snapshot view. They all share a common data structure which is a map of Set<CompoundKey> (variables of interest) to Integer (bound).
For blocking, synchronous remote call, we use Java RMI. For non-blocking, asynchronous message sending and receiving, we use ActiveMQ.
Java RMI is used for synchronous remote calls (e.g., begin, read, write, and end operations of transactions)
We use ActiveMQ (which is an implementation of JMS) for asynchronous messaging service (e.g., propagate and receive).
In our master-slave settings, the master is