Подтвердить что ты не робот

Кто-то действительно сортирует терабайты данных?

Недавно я поговорил с кем-то, кто работает на Amazon, и он спросил меня: "Как я могу сортировать терабайты данных с использованием языка программирования?"

Я парень на С++, и, конечно же, мы говорили о сортировке слияния, и одним из возможных методов является разделение данных на меньший размер и сортировка каждого из них и их окончательное объединение.

Но на самом деле такие компании, как Amazon или eBay, сортируют терабайты данных? Я знаю, они хранят тонны информации, но сортируют ли они их?

Вкратце мой вопрос: почему бы им не сортировать их в первую очередь, а не сортировать терабайты данных?

4b9b3361

Ответ 1

Да, некоторые компании, конечно, сортируют по крайней мере столько данных каждый день.

В Google есть фреймворк MapReduce, который разбивает работу - как сортировку слияния - на разные блоки и плавно обрабатывает аппаратные и сетевые сбои.

Hadoop - это аналогичный проект Apache, который вы можете играть с самим собой, чтобы разрешить разделение алгоритма сортировки по кластеру компьютеров.

Ответ 2

Но на самом деле, нравится ли компания Amazon/Ebay, сортировать терабайты данных? я знаете, они хранят тонны информации, но сортировка их.

Да. В прошлый раз я ежедневно проверял Google более 20 петабайт данных.

Почему бы им не сортировать их первое место вместо сортировки терабайт данных, мой вопрос в скорлупа.

EDIT: релет делает очень хорошую точку; вам нужно только сохранить индексы и отсортировать их. Вы можете легко и эффективно получить данные сортировки таким образом. Вам не нужно сортировать весь набор данных.

Ответ 3

Рассмотрим данные журнала с серверов, Amazon должен иметь огромный объем данных. Данные журнала обычно хранятся по мере их получения, то есть сортируются в соответствии со временем. Таким образом, если вы хотите, чтобы он отсортировался по продукту, вам нужно отсортировать весь набор данных.

Другая проблема заключается в том, что много раз данные должны сортироваться в соответствии с требованиями к обработке, которые могут быть неизвестны заранее.

Например: хотя это не терабайт, я недавно отсортировал около 24 ГБ сетевых данных Twitter-последователей, используя сортировку слиянием. Реализация, которую я использовал, была профессором Дэном Лемриром.

http://www.daniel-lemire.com/blog/archives/2010/04/06/external-memory-sorting-in-java-the-first-release/

Данные сортировались в соответствии с идентификаторами пользователя, и каждая строка содержала идентификатор пользователя, а затем идентификатор пользователя, который следит за ним. Однако в моем случае мне нужны данные о том, кто следует за кем. Таким образом, мне пришлось сортировать его снова с помощью второго идентификатора пользователя в каждой строке.

Однако для сортировки 1 ТБ я бы использовал map-reduce, используя Hadoop. Сортировка - это шаг по умолчанию после функции карты. Таким образом, я бы выбрал функцию отображения как идентификатор, а NONE - как функцию уменьшения и установил потоковые задания.

Hadoop использует HDFS, который хранит данные в огромных блоках по 64 МБ (это значение можно изменить). По умолчанию он запускает одиночную карту на блок. После того, как функция карты запущена, вывод из карты сортируется, я думаю, по алгоритму, подобному сортировке слияния.

Вот ссылка на идентификатор: http://hadoop.apache.org/common/docs/r0.16.4/api/org/apache/hadoop/mapred/lib/IdentityMapper.html

Если вы хотите отсортировать по некоторому элементу в этих данных, я бы сделал этот элемент ключом в XXX, а строка - значением вывода на карте.

Ответ 4

Каждый индекс базы данных представляет собой отсортированное представление некоторой части ваших данных. Если вы индексируете его, вы сортируете ключи - даже если вы не обязательно переупорядочиваете весь набор данных.

Ответ 5

Да. Некоторые компании это делают. Или, может быть, даже люди. Например, вы можете использовать высокочастотные трейдеры. Некоторые из них хорошо известны, говорят Goldman Sachs. Они используют очень сложные алгоритмы против рынка, принимая во внимание данные по тику за последние пару лет, что означает каждое изменение ценового предложения, цены реальных сделок (торги AKA в качестве отпечатков) и т.д. Для сильно волатильных инструментов, таких как акции, фьючерсы и опционы, каждый день есть гигабайты данных, и им приходится делать научные исследования по тысячам инструментов за последние пару лет. Не говоря уже о новостях, которые они коррелируют с рынком, погодными условиями и даже фазой Луны. Итак, да, есть ребята, которые сортируют терабайты данных. Может быть, не каждый день, но все же, они делают.

Ответ 6

Научные наборы данных могут легко запускаться в терабайты. Вы можете сортировать их и хранить их одним способом (например, по дате), когда вы собираете данные. Однако в какой-то момент кто-то захочет, чтобы данные были отсортированы другим способом, например. по широте, если вы используете данные о Земле.

Ответ 7

Крупные компании регулярно сортируют tera и петабайты данных. Я работал в нескольких компаниях. Как сказал Дин Дж, компании полагаются на рамки, созданные для эффективного и последовательного решения таких задач. Таким образом, пользователям данных не нужно выполнять собственную сортировку. Но люди, которые строили рамки, должны были выяснить, как делать определенные вещи (а не просто сортировку, а извлечение ключей, обогащение и т.д.) В массовом масштабе. Несмотря на это, могут возникнуть ситуации, когда вам нужно будет выполнить свою собственную сортировку. Например, я недавно работал над проектом данных, который включал обработку файлов журнала с событиями из мобильных приложений. Для политик безопасности/конфиденциальности определенные поля в файлах журналов должны быть зашифрованы до того, как данные могут быть перенесены для дальнейшей обработки. Это означало, что для каждой строки применялся пользовательский алгоритм шифрования. Однако, поскольку отношение Encrypted to events было высоким (одно и то же значение поля появляется в файле 100 секунд), было более эффективно сначала сортировать файл, шифровать значение, кэшировать результат для каждого повторного значения.