A method comprising: receiving a request to aggregate data grouped by a first column ; in response to receiving the request, performing, for each row of a plurality of rows: retrieving, using hardware of a group column access unit , a value from the first column of the row; wherein the value from the first column of the row is a group value for the row; mapping, using hardware of a hash table access unit , the group value for the row to an address in volatile memory; retrieving from volatile memory associated with the address, using hardware of a aggregation state access unit , a set of aggregation data for a group associated with the group value; and updating, using hardware of a value column access unit , an aggregate value included in the set of aggregation data based on a value contained in a second column of the row; wherein the group column access unit , the hash table access unit , the aggregation state access unit and the value column access unit are separate and distinct hardware units; and wherein the group column access unit , the hash table access unit , the aggregation state access unit and the value column access unit each have a separate and distinct local memory . receiving a request to aggregate data grouped by a first column ; in response to receiving the request, performing, for each row of a plurality of rows: retrieving, using hardware of a group column access unit , a value from the first column of the row; wherein the value from the first column of the row is a group value for the row; mapping, using hardware of a hash table access unit , the group value for the row to an address in volatile memory; retrieving from volatile memory associated with the address, using hardware of a aggregation state access unit , a set of aggregation data for a group associated with the group value; and updating, using hardware of a value column access unit , an aggregate value included in the set of aggregation data based on a value contained in a second column of the row; wherein the group column access unit , the hash table access unit , the aggregation state access unit and the value column access unit are separate and distinct hardware units; and wherein the group column access unit , the hash table access unit , the aggregation state access unit and the value column access unit each have a separate and distinct local memory . retrieving, using hardware of a group column access unit , a value from the first column of the row; wherein the value from the first column of the row is a group value for the row; mapping, using hardware of a hash table access unit , the group value for the row to an address in volatile memory; retrieving from volatile memory associated with the address, using hardware of a aggregation state access unit , a set of aggregation data for a group associated with the group value; and updating, using hardware of a value column access unit , an aggregate value included in the set of aggregation data based on a value contained in a second column of the row; wherein the group column access unit , the hash table access unit , the aggregation state access unit and the value column access unit are separate and distinct hardware units; and wherein the group column access unit , the hash table access unit , the aggregation state access unit and the value column access unit each have a separate and distinct local memory . <EOS>