1. A method of executing a transaction in a distributed storage system, the method comprising: for data chunks of a read set of the transaction: reading data of the data chunks of the read set through remote direct memory access; and reading an initial version number and an initial lock value associated with each data chunk of the read set; after reading the data, reading a final version number and a final lock value associated with each data chunk of the read set; determining a validity of the read data by evaluating a version and a lock of each data chunk of the read set; and determining the read data as valid when the initial version number matches the final version number and the initial lock value matches the final lock value; and for data chunks of a write set of the transaction: setting locks on the data chunks of the write set; writing data to the locked data chunks through remote direct memory access; releasing the locks of the locked data chunks; and incrementing a version number of each released data chunk.