ram_file
DETS Erlang 文档中描述了一个选项
open_file(name, args)
{ram_file, boolean()}
- 表是否保存在 RAM 中。将表保留在 RAM 中听起来像是一种反常现象,但可以提高打开表、插入一组对象然后关闭表的应用程序的性能。当表关闭时,其内容被写入磁盘文件。默认为false
.
这将在插入或更新后在磁盘上执行保存
如果我使用打开 - 然后查找 - 然后关闭怎么办?
我没有查看文档,但我认为这意味着虚拟机将打开文件并可能打开mmap
它,因此它会不断保存在内存中,并且会与磁盘上的文件同步,但我认为更改仍然可以在缓存中结束,因此不能立即写入磁盘。如果您想确保所有更改都已刷新到磁盘,请使用dets:sync/1
对表的调用来强制刷新数据,这在文档中明确说明:
这也适用于已打开且标志
ram_file
设置为的表true
。在这种情况下,RAM 文件的内容被刷新到磁盘。
每次查找后它不会打开或关闭文件,但会保持打开状态,直到dets:close/1
不会在给定表上调用。另一方面,每次查找的打开和关闭表可能会很昂贵,因此它会使 DETS 的整个使用变得毫无意义。