1. A method comprising: when a first write transaction executes on a non-transitory data store: allocating, by a computing device in communication with the non-transitory data store, a first memory location in the non-transitory data store; and writing data, by the computing device, to the first memory location; executing, by the computing device, one or more read transactions on the first memory location after completion of the first write transaction; incrementing, by the computing device, a first pointer counter associated with the first memory location upon completion of the first write transaction and for each read transaction executing on the first memory location to get the data; when a second write transaction executes on the non-transitory data store to update the data: allocating, by the computing device, a second memory location in the non-transitory data store; and writing updated data, by the computing device, to the second memory location; after completion of the second write transaction, the computing device: decrementing the first pointer counter associated with the first memory location; and incrementing a second pointer counter associated with the second memory location; and de-allocating the first memory location, by the computing device, when the first pointer counter associated with the first memory location decrements to zero.