为什么删除所有键后dets file_size不减小

  • 本文关键字:file size dets 删除 erlang dets
  • 更新时间 :
  • 英文 :


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

> {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时,文件大小恢复正常。

> 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文件的大小限制。

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

还有一种方法可以减少DETS表的大小(在删除后)。

关闭这个DETS表(DETS: Close),然后用{repair, force}选项打开它。

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

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

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

相关内容

  • 没有找到相关文章

最新更新