mnesia:wait_for_tables/2,我真的明白了吗?

Muz*_*hua 5 erlang mnesia

我现在已经使用了mnesia一段时间了.我必须承认,我觉得我并不完全理解mnesia的概念:wait_for_tables/2.引用下面的文档说:

Some applications need to wait for certain tables to be accessible in order to do
useful work. mnesia:wait_for_tables/2 hangs until all tables in the Tab List are
accessible, or until timeout is reached.
现在,对于我开发的所有应用程序,我必须在启动后端时调用它.在上面的文档中,上下文"Some applications"没有很好地扩展,这就是我的问题所在.

这些是我的想法:
1.等待这种方法意味着我们正在加载mnesia表,从Disc到RAM(Disc_copies的情况)
2.我个人认为,如果我的应用程序只包含RAM (ram_copies)表,那么我不需要这个我的代码中的方法.现在,我认为如果我只有disc_only_copies,我也不需要这个功能.
3.此外,我在从网络加载mnesia表时需要此功能,尤其是当我的表被复制时,所以我的应用程序需要等待启动时​​的mnesia才能使这些表准备好.但这仍然只适用于类型表,disc_copies为什么完全在Disc上运行或完全在RAM中运行的应用程序需要等待并加载表?

问题:
帮助和检查我的想法1,2和3.一般来说,只有在处理mnesia表类型时才需要此功能:disc_copies因为这种类型与光盘和RAM上的数据复制有关吗?

如果我的表都是碎片,(我总是为每个片段调用此方法以确保mnesia为我的应用程序做好准备),我是否必须调用每个片段的方法?是ATOMIC或Transactional的方法,如果我在mnesia事务中调用它(意味着如果我单独指定基表,mnesia将自动加载所有表片段)?我的碎片的表格类型对此功能也有影响吗?

小智 5

当启动 mnesia 时,mnesia 只是将所有应该从磁盘或网络加载的表排队。

mnesia:wait_for_tables/2 为您提供一个同步点,因此您不必轮询表是否已准备好可供使用。

如果您不使用光盘且没有复制(即模式在启动期间始终为空),则不需要使用 wait_for_tables。