Рассмотрим данные журналов с серверов, Amazon должен иметь огромное количество данных. Данные журнала обычно хранятся по мере их поступления, то есть сортируются по времени. Таким образом, если вы хотите отсортировать данные по продукту, вам нужно отсортировать весь набор данных.
Другая проблема заключается в том, что во многих случаях данные должны быть отсортированы в соответствии с требованиями обработки, которые могут быть неизвестны заранее.
Например: хотя и не терабайт, я недавно отсортировал около 24 ГБ данных сети Twitter-последователя, используя сортировку слиянием. Реализация, которую я использовал, была проф. Dan Lemire.
http://www.daniel -lemire.com / блог / Архивы / 2010/04/06 / внешнего памяти сортировочный-в-Java--первый-релиз /
Данные были отсортированы в соответствии с идентификаторами пользователей, и каждая строка содержала идентификатор пользователя, за которым следует идентификатор пользователя, который следует за ним. Однако в моем случае мне нужны были данные о том, кто за кем следует. Поэтому мне пришлось снова отсортировать его по второму идентификатору пользователя в каждой строке.
Однако для сортировки 1 ТБ я бы использовал map-Reduction, используя Hadoop .
Сортировка - это шаг по умолчанию после функции карты. Таким образом, я бы выбрал функцию карты в качестве идентификатора, а НЕТ - в качестве функции сокращения и настройки потоковых заданий.
Hadoop использует HDFS , которая хранит данные в огромных блоках по 64 МБ (это значение можно изменить). По умолчанию он запускает одну карту на блок. После запуска функции map вывод из карты сортируется, я думаю, по алгоритму, подобному сортировке слиянием.
Вот ссылка на личность:
http://hadoop.apache.org/common/docs/r0.16.4/api/org/apache/hadoop/mapred/lib/IdentityMapper.html
Если вы хотите отсортировать по какому-либо элементу в этих данных, я бы сделал этот элемент ключом в XXX, а строку в качестве значения в качестве вывода карты.