A method comprising: receiving, at data processing hardware, cache configuration information indicating a maximum size and an incremental size for a cache associated with a user, the cache configured to store a portion of a table stored on memory hardware in communication with the data processing hardware, the table stored on the memory hardware in a row-major format and comprising a plurality of columns and a plurality of rows; caching, by the data processing hardware, in a column-major format, a subset of the plurality of columns of the table in the cache associated with the user; receiving, at the data processing hardware, a plurality of data requests, each data request requesting access to the table stored on the memory hardware and associated with a corresponding access pattern requiring access to one or more of the plurality of columns of the table; and while executing one or more workloads on the data processing hardware: for each column of the plurality of columns of the table, determining, by the data processing hardware, an access frequency indicating a number of times the corresponding column is accessed over a predetermined time period based on the corresponding access pattern associated with each of the plurality of data requests; and dynamically adjusting, by the data processing hardware, the subset of the plurality of columns cached in the column-major format in real-time based on the access patterns, the maximum size for the cache, and the incremental size for the cache. receiving, at data processing hardware, cache configuration information indicating a maximum size and an incremental size for a cache associated with a user, the cache configured to store a portion of a table stored on memory hardware in communication with the data processing hardware, the table stored on the memory hardware in a row-major format and comprising a plurality of columns and a plurality of rows; caching, by the data processing hardware, in a column-major format, a subset of the plurality of columns of the table in the cache associated with the user; receiving, at the data processing hardware, a plurality of data requests, each data request requesting access to the table stored on the memory hardware and associated with a corresponding access pattern requiring access to one or more of the plurality of columns of the table; and while executing one or more workloads on the data processing hardware: for each column of the plurality of columns of the table, determining, by the data processing hardware, an access frequency indicating a number of times the corresponding column is accessed over a predetermined time period based on the corresponding access pattern associated with each of the plurality of data requests; and dynamically adjusting, by the data processing hardware, the subset of the plurality of columns cached in the column-major format in real-time based on the access patterns, the maximum size for the cache, and the incremental size for the cache. for each column of the plurality of columns of the table, determining, by the data processing hardware, an access frequency indicating a number of times the corresponding column is accessed over a predetermined time period based on the corresponding access pattern associated with each of the plurality of data requests; and dynamically adjusting, by the data processing hardware, the subset of the plurality of columns cached in the column-major format in real-time based on the access patterns, the maximum size for the cache, and the incremental size for the cache.