A computer system, comprising: a processing system comprising a processing device and computer storage, the computer storage including a local memory (115; 215) and a non-volatile memory (130; 230) for persistent storage of data, wherein the local memory has a first latency and the non-volatile memory has a second latency; wherein the computer storage stores computer program instructions that, when executed by the processing system, configures the computer system to comprise: a buffer pool management system storing a buffer pool data structure (110; 210) defining a collection of buffers, each buffer being defined by a buffer data structure, wherein the buffer data structure includes data indicative of a state of the buffer and data indicative of memory locations storing data for the buffer, wherein in a first state, the buffer references memory locations in local memory, and in a second state the buffer references memory locations in the non-volatile memory; characterized by: wherein in the second state, an application executing on the computer system accesses data for the buffer from the non-volatile memory without copying the data to the local memory, wherein, when the application prepares to modify data for a buffer and the buffer is in the second state, the buffer pool management system copies the data for the buffer from the memory locations in the non-volatile memory to memory locations in the local memory, changes the buffer to the first state, and changes the buffer to reference the locations in the local memory. a processing system comprising a processing device and computer storage, the computer storage including a local memory (115; 215) and a non-volatile memory (130; 230) for persistent storage of data, wherein the local memory has a first latency and the non-volatile memory has a second latency; wherein the computer storage stores computer program instructions that, when executed by the processing system, configures the computer system to comprise: a buffer pool management system storing a buffer pool data structure (110; 210) defining a collection of buffers, each buffer being defined by a buffer data structure, wherein the buffer data structure includes data indicative of a state of the buffer and data indicative of memory locations storing data for the buffer, wherein in a first state, the buffer references memory locations in local memory, and in a second state the buffer references memory locations in the non-volatile memory; characterized by: wherein in the second state, an application executing on the computer system accesses data for the buffer from the non-volatile memory without copying the data to the local memory, wherein, when the application prepares to modify data for a buffer and the buffer is in the second state, the buffer pool management system copies the data for the buffer from the memory locations in the non-volatile memory to memory locations in the local memory, changes the buffer to the first state, and changes the buffer to reference the locations in the local memory. wherein in the second state, an application executing on the computer system accesses data for the buffer from the non-volatile memory without copying the data to the local memory, wherein, when the application prepares to modify data for a buffer and the buffer is in the second state, the buffer pool management system copies the data for the buffer from the memory locations in the non-volatile memory to memory locations in the local memory, changes the buffer to the first state, and changes the buffer to reference the locations in the local memory.