Я получил базу данных BSDDB на основе python. Очевидно, он хранится на жестком диске. Когда я удаляю некоторые записи, файл на диске не становится меньше (следовательно, он растет довольно быстро...)
utDelList = []
urlsDelList = []
for ut in iter(self.urls2task):
tmp = string.split(ut, ":")
uid = tmp[1]
url = cPickle.loads(self.urls[int(uid)])
urlsDelList.append(uid)
utDelList.append(ut)
del self.urlsDepth[uid]
del self.urlsStatus[uid]
del url
for ut in utDelList:
del self.urls2task[ut]
for uid in urlsDelList:
del self.urls[int(uid)]
(...)
#synchronize all files
self.sync()
Моя последняя надежда состояла в том, чтобы заставить флеш диким способом - закрыв и снова открыв файлы
#close all files & start them again, eg
self.tasks.close()
self.urls2task.close()
self.tasks = bsddb.rnopen(filepath)
self.urls2task = bsddb.hashopen
решающим элементом здесь является запись self.tasks; он растет самым быстрым и самым большим из всех файлов. Может ли травление-сохранить изменение в любом случае способом его удаления? И еще раз - почему файлы все еще сохраняют записи после их удаления? Id быть благодарным 4any предложения (первый пост здесь :))
Вы пытались использовать метод db.compact()?
Согласно документации:
compact (start = None, stop = None, flags = 0, compact_fillpercent = 0, compact_pages = 0, compact_timeout = 0)
Компакт-диски баз данных доступа Btree и Recno и, возможно, возвращают неиспользуемые страницы базы данных Btree, Hash или Recno в базовую файловую систему.
Метод возвращает количество страниц, возвращаемых в файловую систему.
Похоже, что он должен уменьшить размер базы данных на диске
Вероятно, нет возможности вернуть пространство из базы данных btree. Лучшее, что вы можете сделать, это db_dump все данные в текстовом файле и создать новый db с db_load этого файла.
вы должны сжать базу, как описано в http://www.jcea.es/programacion/pybsddb_doc/db.html#db-methods