|
|
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
Интересуют способы сортировки больших данных (порядка 10 ТБ) при наличии лишь 1 GB RAM Исследованные варианты: 1) Разбить файл на тысячи относительно небольших файлов, отсортировать каждый из них и потом склеить. Но этот вариант работать не будет т.к. скажем в первом файле значения 1-10, в 100м значения от 1-50, поэтому склейка не состоится 2) Можно попробовать использовать некую БД, но не уверен, что это правильный подход 3) Можно использовать apache spark, но из того примера, что я видел, данные из файла должны быть все считанны в память - это не представляется возможным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 15:09 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 15:18 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
Для случая, когда бОльшая часть данных должна кэшиться на диск, хорошо подходит Сортировка слиянием . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 15:35 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
AkinaДля случая, когда бОльшая часть данных должна кэшиться на диск, хорошо подходит Сортировка слиянием . Такой подход я рассматривал, но мне он видится неэффективным: в нем необходимо разбивать данные до байт, а это создаст слишком много временных файлов, и вообще займет много времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 15:46 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
interwebмне он видится неэффективным: в нем необходимо разбивать данные до байт, а это создаст слишком много временных файлов, и вообще займет много времени.Да ладно- много файлов! считать научись... если, например, использовать блоки сортировки по 1 Мбайт, то на диске будет максимум 28 файлов, включая исходный и конечный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 15:52 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
interweb, первый вариант - рабочий. Недавно реализовал. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 15:56 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
Как вариант: если в сортировке участвует небольшая часть данных до 1%, т.е. файл это набор записей например по 1 Кб и каждая содержит ключ 8 байт. Для сортировки перелить ключи в отдельный файл со структурой {ключ, смещение}, где смещение - это расположение записи в исходном файле. Затем сортировать по ключу этот новый файл. Затем по нему и исходному создать файл с результатом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 15:57 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
И зачем Дональд Кнут книги писал... Гугл по запросу "внешняя сортировка" выдаёт достаточно материалов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 16:14 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 17:27 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
interweb, А сколько в 10ТБ сущностей для сортировки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 17:40 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
x1ca4064А сколько в 10ТБ сущностей для сортировки? Любое случайное количество. Это не имеет значения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 18:25 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
wadmanЭто не имеет значения.При условии, что 2 комплекта необходимых для сравнения частей сущности поместятся в оперативке... внешнее сравнение двух экземпляров я как-то себе с трудом представляю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 19:14 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
Akinaвнешнее сравнение двух экземпляров я как-то себе с трудом представляю. Я это реализовал последовательным чтением. Оперативки в моем решении нужно 16 мб (можно и меньше), а размер файла не ограничен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 19:22 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
wadmanAkinaвнешнее сравнение двух экземпляров я как-то себе с трудом представляю. Я это реализовал последовательным чтением. Оперативки в моем решении нужно 16 мб (можно и меньше), а размер файла не ограничен. Соврал. :) Не реализовал, но задумал через буферное упреждающее чтение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 19:29 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
AkinaПри условии, что 2 комплекта необходимых для сравнения частей сущности поместятся в оперативке... Как часто надо сравнивать сущности по 0.5+ Гб ? Напомню interwebпри наличии лишь 1 GB RAM ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 19:32 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
Dima TКак часто надо сравнивать сущности по 0.5+ Гб ? Например, при написании тестового задания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 19:36 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
wadmaninterweb, первый вариант - рабочий. Недавно реализовал. ;) Он не может быть рабочим. Вот пример: Блок1: 2 1 3 20 Блок 2: 7 5 8 10 … Блок 50: 2 3 1 30 После сортировки каждого блока и последовательной склейки получим: 1 2 3 20 +5 7 8 10 + … + 1 2 3 30 т.е. данные из 50го блока остаются в позиции 50го блока и не сравниваются с другими блоками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 19:42 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
interweb, топик внимательно перечитай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 19:49 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
interwebОн не может быть рабочим. Вот пример: Как так? У меня же получилось. :) Есть 4-е отсортированных (ранее разбитых) файла (1, 2, 3, 4). Читаем по строке из каждого и сортируем их. 1. Первую строку сливаем в общий файл (0). 2. Если эта строка была (например) из 4-го файла, то из него-же и читаем новую строку. 3. Снова сортируем. 4. см п.1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 20:07 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
interwebИнтересуют способы сортировки больших данных (порядка 10 ТБ) при наличии лишь 1 GB RAM Исследованные варианты: 1) Разбить файл на тысячи относительно небольших файлов, отсортировать каждый из них и потом склеить. Но этот вариант работать не будет т.к. скажем в первом файле значения 1-10, в 100м значения от 1-50, поэтому склейка не состоится 2) Можно попробовать использовать некую БД, но не уверен, что это правильный подход 3) Можно использовать apache spark, но из того примера, что я видел, данные из файла должны быть все считанны в память - это не представляется возможным.Экспромтом: - на первом проходе создаем array, каждый item которого содержит "вес ключа"; - на втором проходе строим бинарный индекс "И это пожалуй все!" /Форест Гамп/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 20:27 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
wadmanЛюбое случайное количество. Это не имеет значения. Не согласен, т.к. "дъявол прячется в деталях": если нужно отсортировать 10^12 байт (т.е. каждая сущность занимает 1 байт), это одно, если нужно отсортировать 2 сущности по 5*10^11, это другое. Общее решение либо должно учитывать эти вырожденные случаи (плюс еще какие-либо возможные, порожденные особой статистикой исходных данных), либо будет не эффективным в ряде задач. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 21:15 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
x1ca4064Не согласен, т.к. "дъявол прячется в деталях" Детали такие, что любая последовательность байт. Задача такая. Придется смириться с ТЗ, а не выставлять в обратку свои. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 21:22 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
wadmanx1ca4064Не согласен, т.к. "дъявол прячется в деталях" Детали такие, что любая последовательность байт. Задача такая. Придется смириться с ТЗ, а не выставлять в обратку свои. Не бывает такого, "отсортировать любую последовательность байт" (если не брать вырожденный случай): эти байты описывают какие-то сущности, для которых и определяют операцию отношения. Для сущностей, подчеркиваю, а не для байт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 21:29 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
wadmanЯ это реализовал последовательным чтением. wadmanзадумал через буферное упреждающее чтение. Это ты всё рассказываешь в предположении, что мы сравниваем строки (ну или бин-последовательности), причём строго посимвольно. А представь себе вариант, когда сравниваемые сущности - это сложные объекты, причём единственный способ сравнить объекты A и B - это вызвать тернарный метод A.Compare(B) (ну либо B.Compare(A) - причём они дадут одинаковый ответ, хотя могут отличаться реализацией). Т.е. надо не только загрузить в память объект А для вызова его метода (и соответственно целиком - а ведь его для этого ещё может потребоваться десериализовать!), но и передать ему (и соответственно опять же полностью загрузить в память) объект B... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 21:38 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
x1ca4064Не бывает такого Уже есть. AkinaЭто ты всё рассказываешь в предположении, что мы сравниваем строки (ну или бин-последовательности), причём строго посимвольно. Нененене. Читай первое сообщение темы и не выдумывай новые условия. Загружать "объект" полностью нет необходимости. Все можно/нужно делать побайтно. Важен результат = отсортированный файл (байты!). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 22:02 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39305469&tid=1340611]: |
0ms |
get settings: |
4ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
137ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 402ms |

| 0 / 0 |
