【问题标题】:Why dets file_size doesnot reduce after deleting all the keys为什么删除所有键后file_size不减小
【发布时间】:2014-07-18 19:31:21
【问题描述】:

我遇到了 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"}]

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

【问题讨论】:

    标签: erlang dets


    【解决方案1】:

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

    关闭此 DETS 表 (dets:close) 并使用选项 {repair, force} 打开它。

    查看文档:http://www.erlang.org/doc/man/dets.htm

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

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

    它对我有用。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2019-03-27
        • 2016-06-11
        • 1970-01-01
        • 2014-11-02
        • 2023-03-30
        • 2015-10-26
        • 1970-01-01
        • 2012-07-26
        • 2011-07-19
        相关资源
        最近更新 更多