python bsddb не очищается при удалении записей

1

Я получил базу данных 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 предложения (первый пост здесь :))

Теги:
flush
bsddb
sync

3 ответа

1

Вы пытались использовать метод db.compact()?

Согласно документации:

compact (start = None, stop = None, flags = 0, compact_fillpercent = 0, compact_pages = 0, compact_timeout = 0)

Компакт-диски баз данных доступа Btree и Recno и, возможно, возвращают неиспользуемые страницы базы данных Btree, Hash или Recno в базовую файловую систему.

Метод возвращает количество страниц, возвращаемых в файловую систему.

Похоже, что он должен уменьшить размер базы данных на диске

0

Вероятно, нет возможности вернуть пространство из базы данных btree. Лучшее, что вы можете сделать, это db_dump все данные в текстовом файле и создать новый db с db_load этого файла.

0

вы должны сжать базу, как описано в http://www.jcea.es/programacion/pybsddb_doc/db.html#db-methods

Ещё вопросы

Сообщество Overcoder
Наверх
Меню