应用程序启动时,Mnesia disc_copies 表如何存储在 ram 中?

aka*_*wal 4 database erlang ram mnesia elixir

我有一个类型为 disc_copies 的表 A。它在磁盘上有两个文件。

  1. A.DCD - 最后修改时间 8 月 30 日
  2. A.DCL - 今天(9 月 7 日)

根据我的理解,A.DCL 是日志文件,A.DCD 拥有所有数据。今天我对A进行了多次操作,但是A.DCD保持不变,但A.DCL的大小增加了。当我的应用程序启动时,当 DCD 文件未更改时,该表如何存储在 ram 中。没有适当的文档,所以谁能告诉确切的过程是什么?即使表中没有数据,DCD 文件也会随着时间的推移变得非常大,有人能澄清一下吗?

Ric*_*rdC 7

对于一个disc_copies表,当Mnesia启动时数据被读入ETS表,所以整个表存在于RAM中。DCD 是最新的完整快照,DCL 文件包含快照后所做的更改,因此首先加载 DCD,然后应用 DCL 条目。当您对表执行操作时,条目将附加到 DCL。当 DCL 变得足够大时,Mnesia 进行新的完整 DCD 转储并清空 DCL。

由于所有数据在运行时都在 RAM 中,因此全表搜索之类的操作非常快,但您最终可能需要大量 RAM,并且启动时间可能会很长。