首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python bsddb在删除条目时不刷新

python bsddb在删除条目时不刷新
EN

Stack Overflow用户
提问于 2011-08-31 18:48:35
回答 3查看 484关注 0票数 1

我有一个python BSDDB数据库。很明显,它存储在硬盘上。当我删除一些条目时,驱动器上的文件不会变小(因此-它增长得非常快……)

代码语言:javascript
复制
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() 

我最后的希望是以一种粗暴的方式强制刷新-通过再次关闭和打开文件

代码语言:javascript
复制
#close all files & start them again, eg
self.tasks.close()
self.urls2task.close()
self.tasks = bsddb.rnopen(filepath)
self.urls2task = bsddb.hashopen

这里的关键元素是self.tasks条目;它是所有文件中增长最快、最大的。酸洗保存会改变移除它的方式吗?再说一次,为什么这些文件在删除后仍然保留这些条目呢?我非常感谢你的建议(这里的第一篇文章:)

EN

回答 3

Stack Overflow用户

发布于 2011-08-31 20:10:36

您是否尝试使用db.compact()方法?

根据文档:

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

压缩Btree和Recno访问方法数据库,并可选择将未使用的Btree、Hash或Recno数据库页返回到基础文件系统。

该方法返回返回给文件系统的页数。

听起来应该可以减少磁盘上数据库的大小

票数 1
EN

Stack Overflow用户

发布于 2011-08-31 19:38:47

可能没有办法从btree数据库本身获得空间。你能做的最好的事情就是在一个文本文件中db_dump所有的数据,然后用这个文件的db_load创建一个新的数据库。

票数 0
EN

Stack Overflow用户

发布于 2011-08-31 20:19:52

您应该按照所述将基础压缩到http://www.jcea.es/programacion/pybsddb_doc/db.html#db-methods

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7255873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档