-{{ydb-short-name}} uses distributed transactions, which are based on ideas from Calvin (see [Calvin: A Scalable Distributed Transactions System](https://cs.yale.edu/homes/thomson/publications/calvin-sigmod12.pdf)). These transactions consist of a set of operations performed by a group of participants, such as DataShards. Unlike Calvin these operations are not required to be deterministic. To execute a distributed transaction, a proposer prepares the transaction at each participant, assigns a position (or timestamp) to the transaction in the global transaction execution order using one of the coordinator tablets, and collects the transaction results. Each participant receives and processes a subset of transactions it is involved in, following a specific order. Participants may process their part of the larger transaction at different speeds and not simultaneously. Distributed transactions share the same timestamp across all participating shards, and must include all changes from transactions with preceding timestamps. When viewed as a logical sequence, timestamps act as a single logical timeline, where any distributed transaction happens at the same point in time.
0 commit comments