logo
logo
Засомневался я,... [Dervish 17/03/2004 14:14]
а правильно ли я сделал.
 
В общем, давайте я поясню, почему именно возникает необходимость в сжатии базы данных, почему файл имеет избыточный размер. Вполне возможно, что тут я перестарался и, возможно, что это стоит изменить.
 
Сейчас в базе фактически, находится две копии данных. Одна копия - актуальная, вторая - предыдущая, запасная.
 
Когда пользователь нажимает Ctrl+S, программа начинает записывать данные в файл. Но пишет данные поверх запасной копии, не трогая актуальную. Если места в запасной копии недостаточно (объём данных возрос), то в сам файл добавляется новое пространство.
 
И только после того, как новая версия данных сохранена, только тогда программа переустанавливает в файле один единственный указатель.
 
Зачем это было сделано? Очень просто: в любой момент времени файл актуален. И, фактически, крах файла может случиться только если питание компьютера пропадёт в момент переустановки указателя. А это очень маловероятно.
 
И тут же из такого подхода следует минус: файл больше нужного размера.
 
Ещё одно замечание: если вы во время сеанса изменили всего одну операцию, на новое место будут записываться не все операции, а только одна, вернее, только та страница файла, на которой находилась эта операция. Поэтому не нужно думать, что файл всегда в два раза больше нужного. Хотя, на практике, при активной работе такое тоже может произойти.
 
Как вы считаете будет лучше: оставить как есть (исправив ошибку с 50 килобайтами) или сделать так, чтобы всякий раз программа полностью переписывала файл и не обращать внимание на возможный риск потери данных (при отключении питания компьютера)?