1. A method comprising: storing a plurality of data items into a data storage comprising a local memory for at least one processor and an external memory, each data item in the plurality of data items comprising a respective first portion and a respective second portion, each respective second portion comprising a respective second set of keys and is stored separately from the respective first portion, and each respective first portion comprising a respective first set of keys and a pointer indicating the respective second portion; storing, into a local memory of a first processor, at least one key within the respective first set of keys for each data item in at least a subset of the plurality of data items; defining at least one data stripe set within a plurality of stripes identified within a plurality of buckets defined for the plurality of items, each data stripe set comprising one respective stripe within each respective bucket of the plurality of buckets; performing, with the first processor, an in-place partial bucket radix sort using an initial key on data items contained within one data stripe set within the at least one data stripe set; grouping, in each bucket after performing the in-place partial bucket radix sort, incorrectly sorted data items into a respective incorrect data item group within each bucket, the incorrectly sorted data items comprising data items within a first bucket but having a respective key value associated with a different bucket; performing a radix sort using the initial key on the items within the respective incorrect data item group; and producing a first level sorted output comprising the plurality of data items within the data storage sorted according to the initial key.