AkelPad Forum Index AkelPad
Support forum
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Проблема при работе с большими файлами (~ 5 Гб)
Goto page 1, 2, 3  Next
 
Post new topic   Reply to topic    AkelPad Forum Index -> Discussion (Russian)
View previous topic :: View next topic  
Author Message
Goodvin



Joined: 08 Dec 2010
Posts: 15

PostPosted: Wed Dec 08, 2010 10:14 am    Post subject: Проблема при работе с большими файлами (~ 5 Гб) Reply with quote

Доброго времени суток.

Есть задача - обрабатывать очень большие файлы, размером порядка 5 Гб.
Файлы - текстовые, внутри файлов разметка xml.

При открытии такого файла с помощью AkelPAd происходит следующее:

редактор AkelPad открыл 1/10 часть файла и пипец.
Ни ошибок, ни варнингов - просто показывает одну десятую от начала файла и всё.

В исходном файле 60240535 (60 с лишним млн) строк, а АкельПад показал 6343812 (6 с лишним млн строк).

Для проверки сделал "Сохранить как" и сохранил открытый файл с другим именем - размер сохраненного файла примерно в 10 раз меньше исходного.

В описании AkelPad на заглавной странице написано "вообще, размер редактируемого файла теоретически не ограничен".

Хотелось бы понять в чем проблема и можно ли использовать AkelPad для моих задач.
Ибо редактор в остальном - просто отличный, пользуюсь им давно и с удовольствием.
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5293

PostPosted: Wed Dec 08, 2010 11:20 am    Post subject: Reply with quote

Goodvin
Странно почему ошибок не было, возможно из-за недостатка ресурсов. Для комфортного редактирования файла в AkelPad'е, размер свободной оперативной памяти должен быть примерно в три раза больше размера файла. Т.е. в вашем случае примерно 15Гб.

Пишут, что EmEditor, UltraEdit справляются в таких случаях.
Back to top
View user's profile Send private message Send e-mail
FeyFre



Joined: 07 Aug 2007
Posts: 2034
Location: Vinnitsa, Ukraine

PostPosted: Wed Dec 08, 2010 11:45 am    Post subject: Reply with quote

Quote:
Т.е. в вашем случае примерно 15Гб.
А если учесть что мы работаем в WIN32 то саксимальное количество доступной нам виртуалки - ну в крайнем случае 3GB(и то если редактор перестроить со специальным флажком, а так только 2GB), то и размер файла ограничивается макс 1Гб.
Quote:
Пишут, что EmEditor, UltraEdit справляются в таких случаях.
Скорее всего читают порциями.

Instructor, какими-нибудь стресс-утилитами пробовали гонять АкелПад?
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
Goodvin



Joined: 08 Dec 2010
Posts: 15

PostPosted: Wed Dec 08, 2010 12:31 pm    Post subject: Reply with quote

Instructor wrote:
Goodvin
Странно почему ошибок не было, возможно из-за недостатка ресурсов.
Другие программы, из числа мной опробованных, при невозможности выполнить задачу - выдают варнинги и/или эксепшены на тему. AkelPad ничего не выдаёт, он исправно работает, в нём можно делать поиск и автозамены, но оперирует он десятой частью файла - порядка 480 мегабайт.

Instructor wrote:
Для комфортного редактирования файла в AkelPad'е, размер свободной оперативной памяти должен быть примерно в три раза больше размера файла. Т.е. в вашем случае примерно 15Гб.
Я запускаю эту задачу на машине с 16 ядрами CPU и 64 Гб ОЗУ.
ОС - Win Server 2003 64-битный.
Ресурсов там более чем достаточно.


Instructor wrote:

Пишут, что EmEditor, UltraEdit справляются в таких случаях.
EmEditor справляется, да.
Но он платный и проприетарный.
А мне бы решение опенсорное, на то есть ряд причин.
Back to top
View user's profile Send private message
Goodvin



Joined: 08 Dec 2010
Posts: 15

PostPosted: Wed Dec 08, 2010 12:40 pm    Post subject: Reply with quote

FeyFre wrote:
Quote:
Т.е. в вашем случае примерно 15Гб.
А если учесть что мы работаем в WIN32 то саксимальное количество доступной нам виртуалки - ну в крайнем случае 3GB(и то если редактор перестроить со специальным флажком, а так только 2GB), то и размер файла ограничивается макс 1Гб.
Винда у меня 64-разрядная, серверная.
И оперирует AkelPad куском файла размером около 480 Гб.

FeyFre wrote:

Quote:
Пишут, что EmEditor, UltraEdit справляются в таких случаях.
Скорее всего читают порциями.
Непохоже.
EmEditor несколько минут считывает файл, притом размещает его точно не в ОЗУ, а похоже что как-то индексирует.
После считывания EmEditor жонглирует этим 5-гиговым файлом быстро и легко, моментально скроллит, быстро делает поиск, позволяет легко перейти в люое место при количестве строк более 60 миллионов.

Как они это делают - не знаю, исходников не дают.
Back to top
View user's profile Send private message
Fr0sT



Joined: 24 Jul 2007
Posts: 876

PostPosted: Wed Dec 08, 2010 1:16 pm    Post subject: Reply with quote

Quote:
Винда у меня 64-разрядная, серверная.

А толку-то, Акель же все равно 32 разрядный.

Вообще с большими файлами порой тоже сталкиваюсь. Пока что Акель при считывании файла подвисает, пока не прочитает его весь (и не перегонит весь текст в utf16, насколько я понимаю). Можно только отменить чтение. А хотелось бы, чтоб некоторый функционал был доступен уже после обработки первых страниц файла - примерно так, как делает MS word. Пусть будет read-only и без статистики по строкам, но хотя бы чтоб просмотреть начало можно было. Даже если этой фичи не будет, все равно будет разумно перегонять текст из кодировки в кодировку не одним большим куском, а блоками поменьше, что существенно сократит потребление оперативки.

Goodvin
а какого рода обработка требуется?
Back to top
View user's profile Send private message
FeyFre



Joined: 07 Aug 2007
Posts: 2034
Location: Vinnitsa, Ukraine

PostPosted: Wed Dec 08, 2010 2:54 pm    Post subject: Reply with quote

Quote:
Пусть будет read-only и без статистики по строкам, но хотя бы чтоб просмотреть начало можно было.
Ну тут Вам в помощь lister32.exe (Просмотрщик от Total Commander-а отдельным приложением).
Quote:
Винда у меня 64-разрядная, серверная.
И оперирует AkelPad куском файла размером около 480 Гб.
Как сказал Fr0sT, Акел остается 32 разрядным, и как сказал я, если Акел будет специальным образом скомпилирован, то максимум он получит 3ГБ памяти.
Quote:
Даже если этой фичи не будет, все равно будет разумно перегонять текст из кодировки в кодировку не одним большим куском, а блоками поменьше, что существенно сократит потребление оперативки.
Всплывет проблема разрезания на блоки: где бы это так разрезать файл, что-бы не разрезать пополам мультибайтный символ. Smile Для перекодировок отдельно существует iconv Smile
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5293

PostPosted: Wed Dec 08, 2010 3:18 pm    Post subject: Reply with quote

Goodvin
Quote:
...но оперирует он десятой частью файла - порядка 480 мегабайт.
А сколько памяти, то он отъедает?

FeyFre
Quote:
какими-нибудь стресс-утилитами пробовали гонять АкелПад?
Например?
Back to top
View user's profile Send private message Send e-mail
Goodvin



Joined: 08 Dec 2010
Posts: 15

PostPosted: Wed Dec 08, 2010 3:48 pm    Post subject: Reply with quote

Fr0sT wrote:
Quote:
Винда у меня 64-разрядная, серверная.

А толку-то, Акель же все равно 32 разрядный.
EmEditor тоже 32-рязрядный - а работает без проблем на такой задаче.
Хотелось бы, чтобы и AkelPad позволял его использовать так же.

Fr0sT wrote:
Goodvin
а какого рода обработка требуется?
Искать в файле строки, как уникальные, так и многократно встречающиеся, делать автозамену определенной подстроки во всем файле и т.п.
Back to top
View user's profile Send private message
Goodvin



Joined: 08 Dec 2010
Posts: 15

PostPosted: Wed Dec 08, 2010 3:52 pm    Post subject: Reply with quote

Instructor wrote:
Goodvin
Quote:
...но оперирует он десятой частью файла - порядка 480 мегабайт.
А сколько памяти, то он отъедает?
Сразу после открытия файла процесс AkelPad отъедает 990 мегабайт с копейками.
Потом, через полчаса занятая процессом память может уменьшиться до 4 мегабайт.
Я так понимаю, это его винда складывает в своп.
Back to top
View user's profile Send private message
FeyFre



Joined: 07 Aug 2007
Posts: 2034
Location: Vinnitsa, Ukraine

PostPosted: Wed Dec 08, 2010 4:20 pm    Post subject: Reply with quote

Ну вместо с 6 студией когда-то была такая утилита Stress, можно было настроить как часто нагружать процессы системными запросами: запросы на перерисовку окон, пару десятков других системных сообщений; дальше, можно было настроить, сколько памяти забрать у процесса, файловый ввод-вывод(временные файлы дергает), по-моему могла даже в контексте процесса создавать собственные потоки. Я если честно, её сейчас найти не могу.
В современных WindowsSDK есть Microsoft Application Verifier (можно стянуть отдельно). В принципе задачи те же выполняет, но естественно меньше настроек и удобств(такая тенденция у мелкомягких).

Можно ещё через статические анализаторами кода прогнать исходники.
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
Goodvin



Joined: 08 Dec 2010
Posts: 15

PostPosted: Thu Dec 09, 2010 9:21 am    Post subject: Reply with quote

Уважаемые разработчики, сообщите, пожалуйста, есть ли в принципе интерес к решению возникшей у меня проблемы?

Есть мнение, было бы очень хорошо, если бы AkelPad стал фактически единственным свободным и открытым текстовым редактором, способным работать с такими большими файлами.
Потому как ни один из перепробованных мной - не справился.
А перепробовал я их около двух десятков, перебрал все известные мне свободные и просто фриварные проекты, в том числе windows-порты юниксовых/линуксовых редакторов.
Ближе всех к решению именно AkelPad, вот если бы только помочь ему открывать весь файл, а не десятую часть.

Может быть я смогу чем-то помочь?
Предоставить какие-либо логи, дампы или какие-то еще сведения.


Last edited by Goodvin on Thu Dec 09, 2010 9:54 am; edited 1 time in total
Back to top
View user's profile Send private message
Fr0sT



Joined: 24 Jul 2007
Posts: 876

PostPosted: Thu Dec 09, 2010 9:35 am    Post subject: Reply with quote

FeyFre
Quote:
Ну тут Вам в помощь lister32.exe (Просмотрщик от Total Commander-а отдельным приложением).

Да я знаю, у меня Universal Viewer стоит, но привычнее запускать Акель. К тому же велики шансы, что может понадобиться отредактировать файл, поэтому временный read only режим во имя скорейшей доступности файла был бы очень кстати.
Quote:
Всплывет проблема разрезания на блоки: где бы это так разрезать файл, что-бы не разрезать пополам мультибайтный символ.

Воооот, это ключевой момент! Сам напарился с ним при допиливании XML парсера. Однако и эта проблема решаема: для юникода - простой проверкой на определенные условия, для мультибайтовых кодировок - на определённые lead bytes. К тому же как-то это ведь сделано в тех же просмотровщиках.
Goodvin
Quote:
Искать в файле строки, как уникальные, так и многократно встречающиеся, делать автозамену определенной подстроки во всем файле и т.п.

А ты не хочешь это дело загнать в БД? Поскольку найти повторяющуюся строку в 5 гиговом файле - это, извиняюсь, трындец.
Back to top
View user's profile Send private message
Goodvin



Joined: 08 Dec 2010
Posts: 15

PostPosted: Thu Dec 09, 2010 9:59 am    Post subject: Reply with quote

Fr0sT wrote:
Goodvin
Quote:
Искать в файле строки, как уникальные, так и многократно встречающиеся, делать автозамену определенной подстроки во всем файле и т.п.

А ты не хочешь это дело загнать в БД?
Оно как раз из БД и выгружено. Smile
Эти 5 гигов - это XML-дамп большой базы данных.
Как раз в plain-тексте дампа поправить несколько строчек, а потом загрузить исправленное снова в БД значительно проще и нагляднее.
Это уже на практике выработалось за несколько лет.

Fr0sT wrote:

Поскольку найти повторяющуюся строку в 5 гиговом файле - это, извиняюсь, трындец.
Ну вот пресловутый EmEditor делает это, не напрягаясь.
Тратит считанные минуты.
И никакой не трындец.
Да и AkelPad в том куске файла, который показывает, тоже делает шустро.
Проблема лишь в том, как заставить AkelPad работать со всем файлом, а не с его десятой частью.
Back to top
View user's profile Send private message
FeyFre



Joined: 07 Aug 2007
Posts: 2034
Location: Vinnitsa, Ukraine

PostPosted: Thu Dec 09, 2010 10:50 am    Post subject: Reply with quote

Goodvin
Я вижу два выхода:
1. Либо учим Акел(а заодно и плагины) работать со свопингом, что совсем не просто и займет уйму(уймище) времени.
2. Либо делаем Акел 64-битным(и перекладываем всю ответственность на кол-во памяти у пользователя), что немного быстрее, но я не уверен что мы имеем достаточно опыта миграции на 64, и выловим все подводные камни(что опять таки выльется в доп. время), да плагин тоже перевести нужно будет.

3. А разделить файлы на куски поменьше не пробовали? Я так понимаю качество обработки от этого не пострадает.
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
Display posts from previous:   
Post new topic   Reply to topic    AkelPad Forum Index -> Discussion (Russian) All times are GMT
Goto page 1, 2, 3  Next
Page 1 of 3

 
Jump to:  
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


SourceForge.net Logo Powered by phpBB © 2001, 2005 phpBB Group