应用程序启动时,Mnesia disc_copies table 是如何存储在 ram 中的?
How is Mnesia disc_copies table stored in ram when application starts?
我有一个 table A 类型 disc_copies。
它在磁盘上有两个文件。
- A.DCD - 最后修改时间 8 月 30 日
- A.DCL - 今天(9 月 7 日)
据我了解,A.DCL 是日志文件,A.DCD 包含所有数据。
今天我对 A 做了多次操作,但是 A.DCD 保持不变,但 A.DCL 的大小增加了。
当我的应用程序启动时,这个 table 如何在 DCD 文件未更改的情况下存储在 ram 中。
没有正确的文档,所以任何人都可以告诉确切的过程是什么?
即使 table 中没有数据,DCD 文件也会随着时间的推移变得非常大,谁能澄清一下?
对于disc_copiestable,当Mnesia启动时,数据被读入ETStable,所以整个table存在于RAM中。 DCD 是最新的完整快照,而 DCL 文件包含快照后所做的更改,因此首先加载 DCD,然后应用 DCL 条目。当您对 table 执行操作时,条目将附加到 DCL。当 DCL 增长到足够大时,Mnesia 进行新的完整 DCD 转储并清空 DCL。
由于所有数据在运行时都在 RAM 中,所以像完整 table 搜索这样的事情非常快,但您最终可能需要大量 RAM,并且启动时间可能会变得很长。
我有一个 table A 类型 disc_copies。 它在磁盘上有两个文件。
- A.DCD - 最后修改时间 8 月 30 日
- A.DCL - 今天(9 月 7 日)
据我了解,A.DCL 是日志文件,A.DCD 包含所有数据。 今天我对 A 做了多次操作,但是 A.DCD 保持不变,但 A.DCL 的大小增加了。 当我的应用程序启动时,这个 table 如何在 DCD 文件未更改的情况下存储在 ram 中。 没有正确的文档,所以任何人都可以告诉确切的过程是什么? 即使 table 中没有数据,DCD 文件也会随着时间的推移变得非常大,谁能澄清一下?
对于disc_copiestable,当Mnesia启动时,数据被读入ETStable,所以整个table存在于RAM中。 DCD 是最新的完整快照,而 DCL 文件包含快照后所做的更改,因此首先加载 DCD,然后应用 DCL 条目。当您对 table 执行操作时,条目将附加到 DCL。当 DCL 增长到足够大时,Mnesia 进行新的完整 DCD 转储并清空 DCL。
由于所有数据在运行时都在 RAM 中,所以像完整 table 搜索这样的事情非常快,但您最终可能需要大量 RAM,并且启动时间可能会变得很长。