FoundationDB: A Distributed Unbundled Transactional Key Value Store
Key and value sizes are limited to 10 KB and 100 KB respectively for better performance. Transaction size is limited to 10 MB
Transaction processing
Optimistic Concurrency Control + MVCC
A client transaction starts by contacting one of the Proxies to obtain a read version (i.e., a timestamp). The Proxy then asks the Sequencer for a read version that is guaranteed to be no less than any previously issued transaction commit version, and this read version is sent back to the client. Then the client may issue multiple reads to StorageServers and obtain values at that specific read version. Client writes are buffered locally without contacting the cluster. At commit time, the client sends the transaction data, including the read and write sets (i.e., key ranges), to one of the Proxies and waits for a commit or abort response from the Proxy. If the transaction cannot commit, the client may choose to restart the transaction from the beginning again.
