![]() |
как работать с большими файлами
есть файл весит хрен знает сколько , сотни гигов, в этом файле одни цифры, их надо упорядочить от 0 и до победного конца
вопрос как это сделать, чтобы сервак совсем не крякнуть как сделать сортировку это всего лишь полстрочки в питоне (sort функция) вопрос если просто это сделать сервер умрет. Подскажите, как бы мне разделить на батчи целиковый файл, чтобы его просортировать, да так,чтобы сервер не убить и сколько примерно по времени такой файл будет отрабатывать. Как бы минимзировать вычислительную сложность ,чтобы он не 100 лет думал? |
А толку бить на куски, если потом всё равно надо отсортированные куски составлять вместе и сортировать заново?
|
если канал резиновый, то можно купить какой-нибудь облачный сервер (сейчас хоть почасовая оплата доступна) и загрузить его, пускай "развлекается"
|
Ну или можно попробовать через Powershell Core 7, очень эффективная и быстрая штука.
Непонятно только, что за сервер и что за файл, и есть ли требования к инструменту сортировки - питон там, удав или ещё что. |
Цитата:
раскидать содержимое по отдельным файлам основываясь на паре старших разрядов отосортировать каждый из них привычным способом собрать по порядку отдельные файлы в один большой Цитата:
|
Busla, не знаю, в соседней ветке был случай с group, так PS 5.1 у меня пыхтел больше суток и так и не сделал, а PS 7 работал минут 15-20. Допускаю, что и с sort могло произойти нечто подобное.
|
Ребят, спасибо за подсказки, по крайней мере понял на что смотреть.
|
Никакие PowerShell'ы, хоть обычные, хоть Core'ы, сюда не годятся по определению. Чистый (без .Net) C/C++, а лучше ассемблер.
Но начинать надо с: Цитата:
|
Iska, txt файл
Iska, и как ассемблер может тут помочь? |
Цитата:
Цитата:
|
Iska, вы чушь пиш
Языки высокого уровня потому и существуют, что это по сути набор ассемблерных функций надёжность и эффективность которых за вас вылизывала толпа умнейших людей. Самостоятельно на ассемблере имеет смысл реализовывать новый алгоритм. |
Цитата:
|
|
r-studio, сортировка должна быть текстовая или числовая?
какая максимальная разрядность чисел? распределение примерно равномерное? |
Busla,числовое, нет распределение не равномерное, это точно.
|
Цитата:
На unix-like такое делается как два пальца, например вот в убунте WSL на винде 10 сортируем как числа с убиранием дублей, второй вариант - распараллеливаем на два потока для ускорения: Код:
time $(sort -u -n 445.txt -o 445_sorted.txt) UPD нагуглил скрипт, использующий всё тот же sort, но c разбитием исходного файла на куски (split,sort,merge). Автор говорит, что так быстрее. Но проверить это можно только на реально большом файле, который не помещается в память. |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
r-studio, спасибо, ясно. Какова конечная цель? Для чего делается сортировка? Что будет происходить с этим отсортированным файлом дальше, для чего он нужен в отсортированном виде? |
Iska, а далее для чего продакт манагер решит , мы не знаем что у Богов на уме)) Возможно будет джойн какой-то или назначение категорий к числам.
|
Ух… Это печально. Можете выяснить?
|
Iska, ну сегодня вряд ли, Боги отдыхают скорее всего, но главное вряд ли скажут, но у думаю моя версия будет джойн какой-то или назначение категорий к числам.
в итоге будет файл число и его тестовая расшифровка |
Цитата:
Цитата:
то, что я озвучил и есть "временные затраты на написание приложений" |
Busla, тогда соглашусь с Вами.
Дело в том, что, по оценкам примерно пятнадцатилетней давности, даже самое лучшее, вылизанное от и до с точки зрения эффективности времени исполнения приложение, созданное высококлассным программистом с идеальным исходным алгоритмом, будучи написано на каком-нибудь Watcom C (даже не C++, который с этой точки зрения ещё хуже) со всеми оптимизациями, с профилированием и последующей заменой критических участков на ассемблерные вставки, и каком-нибудь произвольном ассемблере — давало тридцати-сорокапроцентную разницу во времени исполнения. Такая же ситуация и по затратам памяти. Это в идеальных условиях. В не идеальных, в случае обычных программистов — разница бывала уже кратная. Почему же все не пишут на ассемблере — это тоже понятно: оплачивается время работы программистов, а критическая эффективность исполнения требуется в очень и очень немногих случаях, и приоритет отдаётся первому (почему мы все не летаем на вертолётах, скажем — да?). Плюс, многие вещи на ЯВУ, существенные для корректного исполнения приложений, но занудные для постоянного ручного отслеживания (вроде выхода индекса за пределы массива) там делаются автоматически — не следует считать, что компиляторы «просто хуже» [Busla, это я уже не для Вас пишу, а для тех, кто будет читать и при том достаточно далёк от низкоуровнего программирования]. Насколько время обработки и затраты по оперативной памяти критичны окажутся для коллеги r-studio — кто знает. Я бы всё-таки предпочёл, чтобы он выяснил исходную задачу, потому как может оказаться, что в реальности и не потребуется сортировки всего массива данных. |
Там для каждой позиции (строки видимо) нужно по всем оставшимся строкам файла до конца проходиться (обычный алгоритм сортировки). Это долго, но памяти нужно только для двух строк, чтобы сравнивать по каким-то критериям. Либо можно в БД перегнать, там отсортировать и обратно...
|
Цитата:
|
Можно поменьше файл сгенерировать для бенчмарков с разными БД. Redis in-memory же.
|
Так задача как раз гигантский текстовый файл отсортировать.
|
Цитата:
Цитата:
Цитата:
|
Нет никакого смысла для решения задачи использовать любую субд. Они не для этого. И реляционная сожрёт всю память и сдохнет. Чудес не бывает.
|
Цитата:
|
Печаль такая, всю жизнь работаешь с базами данных, оптимизируешь всяко, и тут такой приходит с вопросом "проверял ли ты лучший способ положить базу?"
Нет, конечно не проверял. И проверять не буду - если я захочу завершить карьеру взрывным способом, то как-нибудь в другой раз. Iska, какая у вас должность и зарплата? тысчонок хотя бы 30 евро в год? Ну так, чтоб я понимал ваш уровень. |
Jula0071, спасибо за Ваш вопрос «Если ты такой умный, то почему не богатый», как говорится — «Ваше мнение очень ценно для нас». Разумеется, нет, коллега, откуда такие зарплаты в нашей деревне :lol:.
Тем не менее, постарайтесь не переходить на личности, равно как не воспринимать мои слова как попытку как-то дискредитировать Ваши утверждения. Я вполне серьёзно хотел бы, чтобы Вы, если у Вас есть таковая возможность, проверили, как будет работать конфигурация, например, на виртуальной машине из 2-4 гигабайт оперативной памяти, x64 ОС и одного из типичных не специализированных серверов баз данных, паре таблиц — Table1 с одним полем Field1 типа INTEGER размером, скажем, в 6-10 гигабайт и аналогичной ей пустой Table2, при использовании банальной конструкции типа SELECT Field1 INTO Table2 FROM Table1 ORDER BY Field1. |
я бы даже sqlite попробовал
|
Цитата:
Сортировка как таковая для задачи не требуется - потому что данные в БД нужно ещё загрузить. Добавление записи в БД - более чем типовая операция, от этого СУБД не дохнет. Если же делать массовый импорт, а затем добавить индекс или переиндексировать, то это хоть и тяжелая операция, но так же вполне стабильно работающая. Цитата:
По тому образцу данных, что предоставил топикстартер вообще создаётся впечатление, что можно делать сортировку подсчётом. |
Цитата:
|
Ребят ссориться не обязательно. В принципе направление мысли я получил, так что тему помечаю как решенная
|
Время: 09:05. |
Время: 09:05.
© OSzone.net 2001-