A method for implementation by one or more data processors forming part of at least one computing system, the method comprising: maintaining an in-memory array holding a column of data; mirroring the in-memory array into a page-based layout that comprises one or more pages (810A, 810B, 810C) in memory; persisting the one or more pages (810A, 810B, 810C) to disk, each of the one or more pages (810A, 810B, 810C) having one or more rows for storing the column of data, wherein persisting the one or more pages (810A, 810B, 810C) to disk comprises: allocating a page, wherein each row has an unload bit value indicating whether a particular row has been reserved for later materialization by a transaction thread and wherein, when a page is allocated, the one or more unload bit values indicate that all rows are not reserved; changing the unload bit value of a row when reserving the row for later materialization; materializing the page when all unload bit values have been changed; removing the page from the memory; providing a lookup mechanism for tracking locations of the pages (810A, 810B, 810C) in memory, wherein the lookup mechanism comprises a hash table, which is configured to correlate page numbers and contents of each of the pages (810A, 810B, 810C) to memory addresses; and locating individual pages of the pages (810A, 810B, 810C) via the lookup mechanism; providing random access to a subset of the one or more rows by at least loading the individual pages of the pages (810A, 810B, 810C) or blocks of the one or more rows on the individual pages from the one or more pages (810A, 810B, 810C) on disk to the in-memory array. maintaining an in-memory array holding a column of data; mirroring the in-memory array into a page-based layout that comprises one or more pages (810A, 810B, 810C) in memory; persisting the one or more pages (810A, 810B, 810C) to disk, each of the one or more pages (810A, 810B, 810C) having one or more rows for storing the column of data, wherein persisting the one or more pages (810A, 810B, 810C) to disk comprises: allocating a page, wherein each row has an unload bit value indicating whether a particular row has been reserved for later materialization by a transaction thread and wherein, when a page is allocated, the one or more unload bit values indicate that all rows are not reserved; changing the unload bit value of a row when reserving the row for later materialization; materializing the page when all unload bit values have been changed; removing the page from the memory; allocating a page, wherein each row has an unload bit value indicating whether a particular row has been reserved for later materialization by a transaction thread and wherein, when a page is allocated, the one or more unload bit values indicate that all rows are not reserved; changing the unload bit value of a row when reserving the row for later materialization; materializing the page when all unload bit values have been changed; removing the page from the memory; providing a lookup mechanism for tracking locations of the pages (810A, 810B, 810C) in memory, wherein the lookup mechanism comprises a hash table, which is configured to correlate page numbers and contents of each of the pages (810A, 810B, 810C) to memory addresses; and locating individual pages of the pages (810A, 810B, 810C) via the lookup mechanism; providing random access to a subset of the one or more rows by at least loading the individual pages of the pages (810A, 810B, 810C) or blocks of the one or more rows on the individual pages from the one or more pages (810A, 810B, 810C) on disk to the in-memory array.