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

时间:2011-11-05 11:31:12

标签: 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 to 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将自动加载所有表片段)?我的片段的表格类型对这个函数也很重要吗?

1 个答案:

答案 0 :(得分:3)

启动mnesia时,mnesia会将所有应加载的表排队 来自光盘或网络。

mnesia:wait_for_tables / 2为您提供了一个同步点,因此您不必这样做 如果表格已准备就绪,则进行轮询。

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