A system comprising: a storage device storing a plurality of data records, each of the plurality of data records including one of a plurality of key values, wherein various data records are assigned to respective ones of two or more processing units; a processor; and a memory storing processor-executable program code executable by the processor to cause each processing unit to execute the following steps independently and in parallel: determine a first plurality of the plurality of data records assigned to a first processing unit; identify a first record of the first plurality of data records, the first record including a first key value; generate a first dictionary entry of a first dictionary for the first key value; store a first identifier of the first record as a tail identifier and as a head identifier in the first dictionary entry; store an end flag in a first shared memory location, the first shared memory location associated with the first record; identify a second record of the first plurality of data records, the second record including the first key value; replace the tail identifier in the first dictionary entry with a second identifier of the second record; and store the first identifier in a second shared memory location, the second shared memory location associated with the second record. a storage device storing a plurality of data records, each of the plurality of data records including one of a plurality of key values, wherein various data records are assigned to respective ones of two or more processing units; a processor; and a memory storing processor-executable program code executable by the processor to cause each processing unit to execute the following steps independently and in parallel: determine a first plurality of the plurality of data records assigned to a first processing unit; identify a first record of the first plurality of data records, the first record including a first key value; generate a first dictionary entry of a first dictionary for the first key value; store a first identifier of the first record as a tail identifier and as a head identifier in the first dictionary entry; store an end flag in a first shared memory location, the first shared memory location associated with the first record; identify a second record of the first plurality of data records, the second record including the first key value; replace the tail identifier in the first dictionary entry with a second identifier of the second record; and store the first identifier in a second shared memory location, the second shared memory location associated with the second record. determine a first plurality of the plurality of data records assigned to a first processing unit; identify a first record of the first plurality of data records, the first record including a first key value; generate a first dictionary entry of a first dictionary for the first key value; store a first identifier of the first record as a tail identifier and as a head identifier in the first dictionary entry; store an end flag in a first shared memory location, the first shared memory location associated with the first record; identify a second record of the first plurality of data records, the second record including the first key value; replace the tail identifier in the first dictionary entry with a second identifier of the second record; and store the first identifier in a second shared memory location, the second shared memory location associated with the second record.