Форум » » Предлагаю уменьшить объем BalanceHistory.mdb » Ответить

Предлагаю уменьшить объем BalanceHistory.mdb

Warlam: Позволю себе выдвинуть предложение по уменьшению этого быстрорастущего файла. Мне кажется есть смысл удалять данные о запросе из базы, если его значение равно предыдущему и последующему запросу. Например: Имеем две записи о балансе в базе: 1.05.05 чч:мм = $10.55 2.05.05 чч:мм = $10.55 и если появляется третья: 3.05.05 чч:мм = $10.55 то данные за 2.05.05 удаляются. На мой взгляд они не нужны. Если у кого-то эти данные используются для чего либо, то реализовать это дело опционально: типа галочка «Минимизировать базу данных для этого телефона» А то что-то BalanceHistory.mdb растет «не по дням, а по часам». :)

Ответов - 15

SiBear: После каждого такого удаления, по хорошему, надо будет делать сжатие базы данных. А это время и ресурсы компьютера. Кстати, у меня мониторятся 14 телефонов уже почти два года (правда, сначала всего 3 было). Размер базы - 23 мегабайта. Разве это много? Плюс, есть сервис «удалить старые записи» в «Истории баланса» на последней закладке... Но, вообще, давайте посмотрим на другие мнения пользователей.

Warlam: SiBear пишет: цитата23 мегабайта. Разве это много? сложно сразу сказать много это или мало. Здесь ведь еще все зависит от скорости изменения баланса и режима использования программы. Если за эти два года баланс каждого из телефонов изменился всего несколько раз, то это очень много. Или установлен автозапрос через каждые три часа и чаще - тогда все быстро распухает от повторяющихся значений. Я стараюсь следить за этим и чищу лишнее. Потому как программу последнее время использую не флешке И на работе и дома. Удобно. Но скорость обработки с ростом базы ощутимо уменьшается.

baf: В принципе, действительно, если данные не используются, зачем их хранить... Или где-то используются? Если не используются, подобное сжатие можно вынести рядом с «удалить старые записи». А после этого можно, если баланс не изменился, записывать новые данные в ту же запись.


bow: Можно делать сжатие базы, например, раз в месяц или в другой срок - как установит пользователь!

Iapetus: Подниму старую тему. У нас мониторится более 100 телефонных номеров и размер базы истории более 800 Мбайт. Очищать её вручную это конечно решение, но постоянно забываем это делать. И такое ощущение это какое-то критическое значение. После этого в errors.txt стали писаться такие ошибки: 30.10.2015 16:01:07: TfrmWB.FormCreate -- > Thread creation error: Недостаточно памяти для обработки команды. Может всё-таки сделать так, чтобы программа автоматически удалаляла старую историю.

unidoxer: Было бы здорово, если б можно было автоматически подчищать историю на нужное пользователю кол-во дней

gpa_76: По мне так проще перейти на хранение данных в БД SQLite, она больше приспособлена для хранения таких типов данных. И там что хранить, что не хранить - можно парой несложных запросов базу подчистить.

SiBear: gpa_76 Так и MDB парой несложных SQL-запросов можно подчистить как угодно ) Мне кажется, что в данном случае надо отказываться от реляционной базы данных. Переходить на документо-ориентированную БД вроде MongoDB. Но только "весит" она очень уж прилично. А аналогов, но легковесных не могу найти (

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

solisto: Корректировка файла BalanceHistory. Открываю в Access. Фильтром выделяю и удаляю старые записи. Но нужно чтобы остались и продолжали изменяться последние данные в колонке "дней без изменений". Но после прочтения программой откорректированного файла и производства нового запроса - счетчик "дни без изменений" обнулился и начался отсчет сначала. Хотя в файле есть строки истории с актуальными числами (открыл посмотрел, удивился). Почему программа не продолжает счет? Что нужно сделать для настройки продолжения счета "дни без изменений"? Как обнулить счетчик в 1й колонке NN ( порядковый номер запроса )? ДОПОЛНЕНИЕ В течение нескольких дней делались обычные запросы. Затем опять открыл BalanceHistory в Access. "Ручками" исправил числа "дни без изменений" на актуальные числа. Сохранил. Запустил приложение. Произвел запросы. Опять внесенные мной данные проигнорированы, но программа продолжила свой отсчет с момента, когда был обрезан файл - т.е. продолжило "свой" счет дней.

SiBear: solisto Программа после каждого запроса информации "просматривает" базуданных (поле Balance) в обратном порядке до того времени, когда не встретит отличное от текущего значения. Т.е. она не обращает внимание на поле "Дней без изменения". Оно не используется в каких-то расчетах. Только поле Balance

solisto: ОК. внес данные дата и время запроса QueryDateTime - корректно рассчитало NoChangeDays в последней строке. Но предыдущие остались без изменений - их программа не трогает. считает архивными? Программа не просматривает весь файл базы и не корректирует данные с учетом вновь внесенных изменений?

SiBear: Да, поле NoChangeDays только архивное. К нему программа не обращается. Расчет ведется только по полю Balance

solisto: SiBear СПАСИБО

Alex_G: Вот тут не надо ничего менять. Есть другие более важные проблемы, типа с прошлого года не работает Теле2 и с конца февраля Скайлинк и программа стала жрать до 2 ГБ памяти.



полная версия страницы