Deterministic concurrency control is able to avoid the expensive two-phase commit in distributed databases and can solve the single-thread bottleneck of transaction processing in blockchain systems. Most existing deterministic concurrency control protocols rely on prior knowledge of the transaction’s read-write set, which is impractical in most cases. The state-of-the-art deterministic concurrency control protocols Aria and DOCC break this limitation. However, they do not perform well in multi-node and multi-core scalability.To solve the scalability issues, we propose Dodo, a novel deterministic concurrency control protocol. Dodo processes transactions in multi-batches, and each batch is divided into three phases. In the first phase, transactions are executed as read committed and staged. In the second phase, transactions are validated for the read-write conflict. In the third phase, only the continuous un-conflicted transactions at the head of the batch can be committed. For the aborted transaction that will be rerun in the next batch, we utilize its write set in the previous execution to reduce the read-write conflicts in the next batch. In this way, Dodo has the following benefits. First, Dodo does not rely on the prior knowledge of the read-write set. Second, Dodo commits transactions in pre-determined orders (TIDs) providing high multi-node scalability. Third, Dodo runs transactions in each phase concurrently, and the aborted transactions are re-executed in a conflict-less manner, enabling high multi-core scalability. Besides, we propose two optimism-based improvements, lazy decision and early-write visibility, to reduce aborts and blocking. Our evaluation shows that Dodo outperforms Aria and DOCC by up to 16.5x and 8.0x in a single-node setting and scales well in a multi-node setting.
Read full abstract