3

ram_fileDETS Erlang 文档中描述了一个选项

open_file(name, args)

{ram_file, boolean()}- 表是否保存在 RAM 中。将表保留在 RAM 中听起来像是一种反常现象,但可以提高打开表、插入一组对象然后关闭表的应用程序的性能。当表关闭时,其内容被写入磁盘文件。默认为false.

这将在插入或更新后在磁盘上执行保存

如果我使用打开 - 然后查找 - 然后关闭怎么办?

4

1 回答 1

1

我没有查看文档,但我认为这意味着虚拟机将打开文件并可能打开mmap它,因此它会不断保存在内存中,并且会与磁盘上的文件同步,但我认为更改仍然可以在缓存中结束,因此不能立即写入磁盘。如果您想确保所有更改都已刷新到磁盘,请使用dets:sync/1对表的调用来强制刷新数据,这在文档中明确说明:

这也适用于已打开且标志ram_file设置为的表true。在这种情况下,RAM 文件的内容被刷新到磁盘。

每次查找后它不会打开或关闭文件,但会保持打开状态,直到dets:close/1不会在给定表上调用。另一方面,每次查找的打开和关闭表可能会很昂贵,因此它会使 DETS 的整个使用变得毫无意义。

于 2019-12-13T13:29:48.530 回答