![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| Budy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 616 Регистрация: 6.2.2004 Где: Екатеринбург Репутация: 1 Всего: 2 |
Добро пожаловать в данную тему
Изложу суть проблемы. Каждый день некая программа ведет лог-файл по своим операциям. Чем больше пользователей, тем больше операций, тем больше лог. Лог-файл за день вырастает до 1-2 Гб. Известно, что каждая операция занимает N символов. Каждая из разделяется по типам (удаление, добавление, изменение). Написал программу, которая удаляет лишние операции, путем отбора и сохраняет их в другой файл. Данная процедура занимает много времени (20-30 минут), так как работа происходит по сети, а необходимо ускорить процесс. Нужно написать программу, которая будет работать прямо с лог-файлом - удалять куски данных. Наглядный пример: в файле записаны операции АБВББААВБВАБ. Нужно удалить все операции А и Б и оставить остальное. Надеюсь идею передал верно Пробовал искать в разных источниках - книги, форумы, везде говорится, что это не возможно. Однако есть надежда, что кто-нибудь знает как это сделать, или хотя бы оптимизировать (ускорить) процесс. Заранее всем спасибо за помощь -------------------- Как ты назовешь свой корабль, так на нем и напишут ![]() |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 9 Всего: 98 |
не совсем понятно что понимается под "это". -- если ищется способ одной (системной) функцией удалить кусок файла (типа DeleteFilePiece(path, startPosition, endPosition)) то такой функции действительно нет. единственный способо удалить из файла кусок данных -- это создать новый файл и перенести туда все, кроме удаляемой инфы. и перезаписать этим файлом текущий файл. возможны так же вариации с подчитыванием куска файла в память и перезаписи этим куском затираемые данные, но большого прироста производительности это не даст... -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
сразу веди лог в виде кучи файлов ограниченного размера. тогда если удаляется большой кусок, то бОльшую часть можно сделать как удаление файла целиком. Будет ьыстрее. Или используй БД
-------------------- Обижено школьников: 8 |
|||
|
||||
| Budy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 616 Регистрация: 6.2.2004 Где: Екатеринбург Репутация: 1 Всего: 2 |
_hunter, насчет единственного способа, я именно так и делал, но занимает слишком много времени. Админ меня не пускает на сервер, где лежат логи, а по сети получается очень долго, потому что сетка постоянно занята.
Сейчас просматривал логи и заметил такой приятный парадокс - ненужные операции в основном идут в начале и в конце лога, а нужные примерно посередине. А если в процентах, то в основном 20-40% в начале и около 30% в конце. Задача упрощается - можно ли подрезать файл не посередине, а с краев? Тогда лог можно было сократить в 2-3 раза! -------------------- Как ты назовешь свой корабль, так на нем и напишут ![]() |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
обрезать конец можно с помощью SetEndOfFile
-------------------- Обижено школьников: 8 |
|||
|
||||
| Budy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 616 Регистрация: 6.2.2004 Где: Екатеринбург Репутация: 1 Всего: 2 |
bems, да это полезно, спасибо... А можно сделать что-нибудь с началом файла?
-------------------- Как ты назовешь свой корабль, так на нем и напишут ![]() |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
с началом все так же как с серединой
-------------------- Обижено школьников: 8 |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
Не перетаскивая файл к себе, ты не узнаешь его содержимого и не сможешь определить, что вырезать, а что нет.
Так что оптимальный вариант - производить работу с файлом на сервере. Если админу больше нравится нагрузка сети, то проблемы у вас обоих. |
|||
|
||||
| Budy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 616 Регистрация: 6.2.2004 Где: Екатеринбург Репутация: 1 Всего: 2 |
bems, понятно, спасибо на этом
Snowy, ты прав, проблемы у нас обоих, но он этого не понимает :-\ -------------------- Как ты назовешь свой корабль, так на нем и напишут ![]() |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 16 Всего: 459 |
Ребята, а разве не для этих целей придумали БД? БД производит произвольный доступ к любой записи и позволяет удалить или добавить запись за время не зависящее от размеров (или почти независящее) самой базы.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Budy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 616 Регистрация: 6.2.2004 Где: Екатеринбург Репутация: 1 Всего: 2 |
Alexeis, согласен, БД рулит, но так получилась что программа не может вести лог сразу в БД.
А вообще я уже оптимизировал свою программку - отрезаю конец файла и получаю файл размером около 60% от исходного. Теперь временные затраты уменьшаются в два с половиной раза. Радостно Всем спасибо за участие. -------------------- Как ты назовешь свой корабль, так на нем и напишут ![]() |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |