首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么dets file_size在删除所有键后不减少

为什么dets file_size在删除所有键后不减少
EN

Stack Overflow用户
提问于 2014-05-29 10:11:44
回答 2查看 179关注 0票数 1

我对dets文件的大小有问题。

代码语言:javascript
复制
> {ok,D1} = dets:open_file(sample_dets_file, [{type, set},{auto_save,3}]).
{ok,sample_dets_file}

> [dets:insert(D1,{{fid,X},"this is sample data"}) || X <- lists:seq(1,10000)].
> dets:info(D1).

[{type,set},
 {keypos,1},
 {size,10000},
 {file_size,769748},
 {filename,"sample_dets_file"}]

> [dets:delete(D1,{fid,X}) || X <- lists:seq(1,10000)].
> dets:info(D1).

[{type,set},
 {keypos,1},
 {size,0},
 {file_size,770092},
 {filename,"sample_dets_file"}]

后插入- {size,10000}, {file_size,769748}

删除后- {size,0}, {file_size,770092}.

即使表是空的,文件大小也没有减少。但是,当我执行delete_all_objects时,文件大小会恢复正常。

代码语言:javascript
复制
> dets:delete_all_objects(D1).
> dets:info(D1).

 [{type,set},
 {keypos,1},
 {size,0},
 {file_size,5464},
 {filename,"sample_dets_file"}]

我不明白除了删除操作之外,还需要做些什么,以减少file_size。问题是,由于dets file_size被限制在4gb以内,即使删除了对象,我也达到了dets文件的大小限制。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-29 11:30:36

除执行delete_all_objects之外,dets实现在删除条目时不尝试收缩文件。要手动缩小文件,您必须创建一个新的临时dets文件,将所有条目复制到新文件中,删除旧文件,并重命名临时文件以替换旧文件。

票数 1
EN

Stack Overflow用户

发布于 2014-11-24 09:06:02

还有一个选项是如何缩小DETS表的大小(删除后)。

关闭此DETS表(dets: Close )并使用选项{修复、强制}打开它。

请参阅文档:http://www.erlang.org/doc/man/dets.htm

整理表碎片的唯一方法是关闭它,然后再打开它,将修复选项设置为强制。

当没有其他进程打开该文件时,将压缩该文件。

对我来说很管用。

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

https://stackoverflow.com/questions/23930877

复制
相关文章

相似问题

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