【问题标题】:How is Mnesia disc_copies table stored in ram when application starts?应用程序启动时,Mnesia disc_copies 表如何存储在 ram 中?
【发布时间】:2020-12-25 23:33:05
【问题描述】:
我有一张 disc_copies 类型的表 A。
它在磁盘上有两个文件。
- A.DCD - 最后修改时间 8 月 30 日
- A.DCL - 今天(9 月 7 日)
据我了解,A.DCL 是日志文件,A.DCD 包含所有数据。
今天我对 A 做了多次操作,但是 A.DCD 保持不变,但 A.DCL 的大小增加了。
当我的应用程序启动时,当 DCD 文件未更改时,此表如何存储在 ram 中。
没有适当的文档,所以任何人都可以告诉确切的过程是什么?
即使表中没有数据,DCD 文件也会随着时间的推移变得非常大,谁能澄清一下?
【问题讨论】:
标签:
database
erlang
elixir
ram
mnesia
【解决方案1】:
对于 disc_copies 表,数据在 Mnesia 启动时被读入 ETS 表,因此整个表存在于 RAM 中。 DCD 是最新的完整快照,DCL 文件包含快照后所做的更改,因此首先加载 DCD,然后应用 DCL 条目。当您对表执行操作时,条目会附加到 DCL。当 DCL 增长到足够大时,Mnesia 会生成一个新的完整 DCD 转储并清空 DCL。
由于所有数据在运行时都在 RAM 中,因此诸如全表搜索之类的操作非常快,但您最终可能需要大量 RAM,而且启动时间可能会变得很长。