|
|
|
Сортировка больших данных при малой 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 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
interwebИнтересуют способы сортировки больших данных (порядка 10 ТБ) при наличии лишь 1 GB RAM а что за файл, какая структура? в смысле - текст, или блоки данных - одинаковые? файл строго последовательного доступа, или можно организовать произвольный? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 22:10 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
wadmanУже есть. Не может быть :), но если уж такая проблема возникла (т.е. сущность==байт) то решение элементарно: заводим 256 счетчиков достаточной размерности, последовательно читаем байты, инкрементируем соответствующий счетчик, после выдаем отсортированную последовательность. Для реализации под 10ТБ данных хватит пары килобайт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 22:12 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
x1ca4064wadmanУже есть. Не может быть :), но если уж такая проблема возникла (т.е. сущность==байт) то решение элементарно: заводим 256 счетчиков достаточной размерности, последовательно читаем байты, инкрементируем соответствующий счетчик, после выдаем отсортированную последовательность. Для реализации под 10ТБ данных хватит пары килобайт. Сущность = любая последовательность байт. Никаких счетчиков не хватит. Уже было. Повторяемся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 22:14 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
wadmanЧитай первое сообщение темы и не выдумывай новые условия.Прочитал внимательно все посты ТС. wadmanВсе можно/нужно делать побайтно.Так и не нашёл... И вообще - это я не ТС пишу, а тебе, в ответ на огульное утверждение, что внешнее сравнение возможно в любом случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 22:18 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
x1ca4064если уж такая проблема возникла (т.е. сущность==байт) то решение элементарно: заводим 256 счетчиков достаточной размерности, последовательно читаем байты, инкрементируем соответствующий счетчик, после выдаем отсортированную последовательность.Это т.н. "Сортировка подсчётом". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 22:20 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
wadmanСущность = любая последовательность байт. Никаких счетчиков не хватит. Уже было. Повторяемся? Вероятно, я не понимаю, о чем Вы говорите: сообщите, какая операция отношения у Вас определена на множестве "любая последовательность байт"? Пример, хотя бы. Ответ любая не принимается, т.к. не бывает задачи отсортировать "любую последовтельность байт" ... ах да, уже повторяюсь :) Бывает только задача отсортировать последовательность сущностей. (New!) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 22:30 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
AkinaЭто т.н. "Сортировка подсчётом". А я то все гадал, как она называется :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 22:31 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
interweb, какова структура файла? (сортируемых записей) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 23:03 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
AkinaЭто т.н. "Сортировка подсчётом". А я то все гадал, как она называется :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2016, 02:16 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
interweb3) Можно использовать apache spark, но из того примера, что я видел, данные из файла должны быть все считанны в память - это не представляется возможным. Ну ты даешь чувак! Чтоб приготовить яичницу ты пойдешь разогревать адронный коллайдер? Да в 1990-е такие сортировки студенты делали на любой рабочей станции с оперативкой в 512 килобайт на Borland C++. Поищи "сортировка слиянием" и еще до кучи "B+дерево" как альтернативный вариант ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2016, 08:47 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
AkinaИ вообще - это я не ТС пишу, а тебе, в ответ на огульное утверждение, что внешнее сравнение возможно в любом случае. Это так и есть. Любая сущность - это байты. Если вся сущность не влазит в оперативку, то байт влезет. x1ca4064Ответ любая не принимается, т.к. не бывает задачи отсортировать "любую последовтельность байт" Ок, пусть будут строки любой длины. Они, как известно, состоят из байт. И бывает так, что вся строка не влазит в оперативку. Достаточно "дочитывать" данные в процессе сравнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2016, 09:32 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
wadmanЭто так и есть. Любая сущность - это байты. Если вся сущность не влазит в оперативку, то байт влезет.Похоже, ты даже не читаешь моих слов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2016, 09:39 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
AkinawadmanЭто так и есть. Любая сущность - это байты. Если вся сущность не влазит в оперативку, то байт влезет.Похоже, ты даже не читаешь моих слов. Не, я не ищу причин не делать, просто делаю. Объект состоит из байт? Да. Объект сравнивается с другим объектом? Да. Другой объект из байт? Да. Код объекта в памяти, данные объекта на диске - читай по байтам и сравнивай. Собственно это всё, что нужно знать для решения задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2016, 09:43 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
wadmanAkinaпропущено... Похоже, ты даже не читаешь моих слов. Не, я не ищу причин не делать, просто делаю. Объект состоит из байт? Да. Объект сравнивается с другим объектом? Да. Другой объект из байт? Да. Код объекта в памяти, данные объекта на диске - читай по байтам и сравнивай. Собственно это всё, что нужно знать для решения задачи.Это совершенно не так. Вот например объект, состоящийся из: { - строка номер 1 - строка номер 2 - порядковый номер - дата - картинка закодированниая в каком- нибудь base64 } Сортировать надо сначала по дате, потом по порядковому номеру /там где даты одинаковы/. Из примера видно, что предложение сортировать какие-то абстрактные байты, совершенно не в кассу. Поскольку "объект" и "ключ сортировки", совершенно разные вещи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2016, 16:16 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
* сортировать список таких объектов, конечно же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2016, 16:18 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
S.G.Из примера видно, что предложение сортировать какие-то абстрактные байты, совершенно не в кассу. Поскольку "объект" и "ключ сортировки", совершенно разные вещи. Не увидел противоречия моему описанию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2016, 16:23 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
Извините, что встреваю в высокоинтеллектуальную беседу ... При побайтовом сравнении требуется найти пару отличающихся байт. Для принятия решения "больше-меньше" нужны только эти два байта. И не нужно хранить просмотренные совпадающие блоки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2016, 16:23 |
|
||
|
Сортировка больших данных при малой RAM
|
|||
|---|---|---|---|
|
#18+
interwebAkinaДля случая, когда бОльшая часть данных должна кэшиться на диск, хорошо подходит Сортировка слиянием . Такой подход я рассматривал, но мне он видится неэффективным: в нем необходимо разбивать данные до байт, а это создаст слишком много временных файлов, и вообще займет много времени. с чего вдруг, на каждом этапе сливаются два отсортированных ряда что мешает разделить на серию небольших блоков, вмещающихся в памяти, отсортировать внутри блока например QSort и сохранить в файл, а потом сливать эти блоки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2016, 20:09 |
|
||
|
|

start [/forum/topic.php?all=1&fid=16&tid=1340611]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 383ms |

| 0 / 0 |
