| View previous topic :: View next topic |
| Author |
Message |
Goodvin
Joined: 08 Dec 2010 Posts: 15
|
Posted: Wed Dec 08, 2010 10:14 am Post subject: Проблема при работе с большими файлами (~ 5 Гб) |
|
|
Доброго времени суток.
Есть задача - обрабатывать очень большие файлы, размером порядка 5 Гб.
Файлы - текстовые, внутри файлов разметка xml.
При открытии такого файла с помощью AkelPAd происходит следующее:
редактор AkelPad открыл 1/10 часть файла и пипец.
Ни ошибок, ни варнингов - просто показывает одну десятую от начала файла и всё.
В исходном файле 60240535 (60 с лишним млн) строк, а АкельПад показал 6343812 (6 с лишним млн строк).
Для проверки сделал "Сохранить как" и сохранил открытый файл с другим именем - размер сохраненного файла примерно в 10 раз меньше исходного.
В описании AkelPad на заглавной странице написано "вообще, размер редактируемого файла теоретически не ограничен".
Хотелось бы понять в чем проблема и можно ли использовать AkelPad для моих задач.
Ибо редактор в остальном - просто отличный, пользуюсь им давно и с удовольствием. |
|
| Back to top |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 4640
|
Posted: Wed Dec 08, 2010 11:20 am Post subject: |
|
|
Goodvin
Странно почему ошибок не было, возможно из-за недостатка ресурсов. Для комфортного редактирования файла в AkelPad'е, размер свободной оперативной памяти должен быть примерно в три раза больше размера файла. Т.е. в вашем случае примерно 15Гб.
Пишут, что EmEditor, UltraEdit справляются в таких случаях. |
|
| Back to top |
|
 |
FeyFre
Joined: 07 Aug 2007 Posts: 1888 Location: Vinnitsa, Ukraine
|
Posted: Wed Dec 08, 2010 11:45 am Post subject: |
|
|
| Quote: | | Т.е. в вашем случае примерно 15Гб. | А если учесть что мы работаем в WIN32 то саксимальное количество доступной нам виртуалки - ну в крайнем случае 3GB(и то если редактор перестроить со специальным флажком, а так только 2GB), то и размер файла ограничивается макс 1Гб.
| Quote: | | Пишут, что EmEditor, UltraEdit справляются в таких случаях. | Скорее всего читают порциями.
Instructor, какими-нибудь стресс-утилитами пробовали гонять АкелПад? |
|
| Back to top |
|
 |
Goodvin
Joined: 08 Dec 2010 Posts: 15
|
Posted: Wed Dec 08, 2010 12:31 pm Post subject: |
|
|
| Instructor wrote: | Goodvin
Странно почему ошибок не было, возможно из-за недостатка ресурсов. | Другие программы, из числа мной опробованных, при невозможности выполнить задачу - выдают варнинги и/или эксепшены на тему. AkelPad ничего не выдаёт, он исправно работает, в нём можно делать поиск и автозамены, но оперирует он десятой частью файла - порядка 480 мегабайт.
| Instructor wrote: | | Для комфортного редактирования файла в AkelPad'е, размер свободной оперативной памяти должен быть примерно в три раза больше размера файла. Т.е. в вашем случае примерно 15Гб. | Я запускаю эту задачу на машине с 16 ядрами CPU и 64 Гб ОЗУ.
ОС - Win Server 2003 64-битный.
Ресурсов там более чем достаточно.
| Instructor wrote: |
Пишут, что EmEditor, UltraEdit справляются в таких случаях. | EmEditor справляется, да.
Но он платный и проприетарный.
А мне бы решение опенсорное, на то есть ряд причин. |
|
| Back to top |
|
 |
Goodvin
Joined: 08 Dec 2010 Posts: 15
|
Posted: Wed Dec 08, 2010 12:40 pm Post subject: |
|
|
| FeyFre wrote: | | Quote: | | Т.е. в вашем случае примерно 15Гб. | А если учесть что мы работаем в WIN32 то саксимальное количество доступной нам виртуалки - ну в крайнем случае 3GB(и то если редактор перестроить со специальным флажком, а так только 2GB), то и размер файла ограничивается макс 1Гб. | Винда у меня 64-разрядная, серверная.
И оперирует AkelPad куском файла размером около 480 Гб.
| FeyFre wrote: |
| Quote: | | Пишут, что EmEditor, UltraEdit справляются в таких случаях. | Скорее всего читают порциями. | Непохоже.
EmEditor несколько минут считывает файл, притом размещает его точно не в ОЗУ, а похоже что как-то индексирует.
После считывания EmEditor жонглирует этим 5-гиговым файлом быстро и легко, моментально скроллит, быстро делает поиск, позволяет легко перейти в люое место при количестве строк более 60 миллионов.
Как они это делают - не знаю, исходников не дают. |
|
| Back to top |
|
 |
Fr0sT
Joined: 24 Jul 2007 Posts: 850
|
Posted: Wed Dec 08, 2010 1:16 pm Post subject: |
|
|
| Quote: | | Винда у меня 64-разрядная, серверная. |
А толку-то, Акель же все равно 32 разрядный.
Вообще с большими файлами порой тоже сталкиваюсь. Пока что Акель при считывании файла подвисает, пока не прочитает его весь (и не перегонит весь текст в utf16, насколько я понимаю). Можно только отменить чтение. А хотелось бы, чтоб некоторый функционал был доступен уже после обработки первых страниц файла - примерно так, как делает MS word. Пусть будет read-only и без статистики по строкам, но хотя бы чтоб просмотреть начало можно было. Даже если этой фичи не будет, все равно будет разумно перегонять текст из кодировки в кодировку не одним большим куском, а блоками поменьше, что существенно сократит потребление оперативки.
Goodvin
а какого рода обработка требуется? |
|
| Back to top |
|
 |
FeyFre
Joined: 07 Aug 2007 Posts: 1888 Location: Vinnitsa, Ukraine
|
Posted: Wed Dec 08, 2010 2:54 pm Post subject: |
|
|
| Quote: | | Пусть будет read-only и без статистики по строкам, но хотя бы чтоб просмотреть начало можно было. | Ну тут Вам в помощь lister32.exe (Просмотрщик от Total Commander-а отдельным приложением).
| Quote: | Винда у меня 64-разрядная, серверная.
И оперирует AkelPad куском файла размером около 480 Гб. | Как сказал Fr0sT, Акел остается 32 разрядным, и как сказал я, если Акел будет специальным образом скомпилирован, то максимум он получит 3ГБ памяти. | Quote: | | Даже если этой фичи не будет, все равно будет разумно перегонять текст из кодировки в кодировку не одним большим куском, а блоками поменьше, что существенно сократит потребление оперативки. | Всплывет проблема разрезания на блоки: где бы это так разрезать файл, что-бы не разрезать пополам мультибайтный символ. Для перекодировок отдельно существует iconv  |
|
| Back to top |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 4640
|
Posted: Wed Dec 08, 2010 3:18 pm Post subject: |
|
|
Goodvin
| Quote: | | ...но оперирует он десятой частью файла - порядка 480 мегабайт. | А сколько памяти, то он отъедает?
FeyFre
| Quote: | | какими-нибудь стресс-утилитами пробовали гонять АкелПад? | Например? |
|
| Back to top |
|
 |
Goodvin
Joined: 08 Dec 2010 Posts: 15
|
Posted: Wed Dec 08, 2010 3:48 pm Post subject: |
|
|
| Fr0sT wrote: | | Quote: | | Винда у меня 64-разрядная, серверная. |
А толку-то, Акель же все равно 32 разрядный. | EmEditor тоже 32-рязрядный - а работает без проблем на такой задаче.
Хотелось бы, чтобы и AkelPad позволял его использовать так же.
| Fr0sT wrote: | Goodvin
а какого рода обработка требуется? | Искать в файле строки, как уникальные, так и многократно встречающиеся, делать автозамену определенной подстроки во всем файле и т.п. |
|
| Back to top |
|
 |
Goodvin
Joined: 08 Dec 2010 Posts: 15
|
Posted: Wed Dec 08, 2010 3:52 pm Post subject: |
|
|
| Instructor wrote: | Goodvin
| Quote: | | ...но оперирует он десятой частью файла - порядка 480 мегабайт. | А сколько памяти, то он отъедает?
| Сразу после открытия файла процесс AkelPad отъедает 990 мегабайт с копейками.
Потом, через полчаса занятая процессом память может уменьшиться до 4 мегабайт.
Я так понимаю, это его винда складывает в своп. |
|
| Back to top |
|
 |
FeyFre
Joined: 07 Aug 2007 Posts: 1888 Location: Vinnitsa, Ukraine
|
Posted: Wed Dec 08, 2010 4:20 pm Post subject: |
|
|
Ну вместо с 6 студией когда-то была такая утилита Stress, можно было настроить как часто нагружать процессы системными запросами: запросы на перерисовку окон, пару десятков других системных сообщений; дальше, можно было настроить, сколько памяти забрать у процесса, файловый ввод-вывод(временные файлы дергает), по-моему могла даже в контексте процесса создавать собственные потоки. Я если честно, её сейчас найти не могу.
В современных WindowsSDK есть Microsoft Application Verifier (можно стянуть отдельно). В принципе задачи те же выполняет, но естественно меньше настроек и удобств(такая тенденция у мелкомягких).
Можно ещё через статические анализаторами кода прогнать исходники. |
|
| Back to top |
|
 |
Goodvin
Joined: 08 Dec 2010 Posts: 15
|
Posted: Thu Dec 09, 2010 9:21 am Post subject: |
|
|
Уважаемые разработчики, сообщите, пожалуйста, есть ли в принципе интерес к решению возникшей у меня проблемы?
Есть мнение, было бы очень хорошо, если бы AkelPad стал фактически единственным свободным и открытым текстовым редактором, способным работать с такими большими файлами.
Потому как ни один из перепробованных мной - не справился.
А перепробовал я их около двух десятков, перебрал все известные мне свободные и просто фриварные проекты, в том числе windows-порты юниксовых/линуксовых редакторов.
Ближе всех к решению именно AkelPad, вот если бы только помочь ему открывать весь файл, а не десятую часть.
Может быть я смогу чем-то помочь?
Предоставить какие-либо логи, дампы или какие-то еще сведения.
Last edited by Goodvin on Thu Dec 09, 2010 9:54 am; edited 1 time in total |
|
| Back to top |
|
 |
Fr0sT
Joined: 24 Jul 2007 Posts: 850
|
Posted: Thu Dec 09, 2010 9:35 am Post subject: |
|
|
FeyFre
| Quote: | | Ну тут Вам в помощь lister32.exe (Просмотрщик от Total Commander-а отдельным приложением). |
Да я знаю, у меня Universal Viewer стоит, но привычнее запускать Акель. К тому же велики шансы, что может понадобиться отредактировать файл, поэтому временный read only режим во имя скорейшей доступности файла был бы очень кстати.
| Quote: | | Всплывет проблема разрезания на блоки: где бы это так разрезать файл, что-бы не разрезать пополам мультибайтный символ. |
Воооот, это ключевой момент! Сам напарился с ним при допиливании XML парсера. Однако и эта проблема решаема: для юникода - простой проверкой на определенные условия, для мультибайтовых кодировок - на определённые lead bytes. К тому же как-то это ведь сделано в тех же просмотровщиках.
Goodvin
| Quote: | | Искать в файле строки, как уникальные, так и многократно встречающиеся, делать автозамену определенной подстроки во всем файле и т.п. |
А ты не хочешь это дело загнать в БД? Поскольку найти повторяющуюся строку в 5 гиговом файле - это, извиняюсь, трындец. |
|
| Back to top |
|
 |
Goodvin
Joined: 08 Dec 2010 Posts: 15
|
Posted: Thu Dec 09, 2010 9:59 am Post subject: |
|
|
| Fr0sT wrote: | Goodvin
| Quote: | | Искать в файле строки, как уникальные, так и многократно встречающиеся, делать автозамену определенной подстроки во всем файле и т.п. |
А ты не хочешь это дело загнать в БД? | Оно как раз из БД и выгружено.
Эти 5 гигов - это XML-дамп большой базы данных.
Как раз в plain-тексте дампа поправить несколько строчек, а потом загрузить исправленное снова в БД значительно проще и нагляднее.
Это уже на практике выработалось за несколько лет.
| Fr0sT wrote: |
Поскольку найти повторяющуюся строку в 5 гиговом файле - это, извиняюсь, трындец. | Ну вот пресловутый EmEditor делает это, не напрягаясь.
Тратит считанные минуты.
И никакой не трындец.
Да и AkelPad в том куске файла, который показывает, тоже делает шустро.
Проблема лишь в том, как заставить AkelPad работать со всем файлом, а не с его десятой частью. |
|
| Back to top |
|
 |
FeyFre
Joined: 07 Aug 2007 Posts: 1888 Location: Vinnitsa, Ukraine
|
Posted: Thu Dec 09, 2010 10:50 am Post subject: |
|
|
Goodvin
Я вижу два выхода:
1. Либо учим Акел(а заодно и плагины) работать со свопингом, что совсем не просто и займет уйму(уймище) времени.
2. Либо делаем Акел 64-битным(и перекладываем всю ответственность на кол-во памяти у пользователя), что немного быстрее, но я не уверен что мы имеем достаточно опыта миграции на 64, и выловим все подводные камни(что опять таки выльется в доп. время), да плагин тоже перевести нужно будет.
3. А разделить файлы на куски поменьше не пробовали? Я так понимаю качество обработки от этого не пострадает. |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|