2011-11-05 45 views
5

我已经使用mnesia一段时间了。我必须承认,我觉得我不完全理解mnesia:wait_for_tables/2的概念。引用下面的文档说这是: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表说,从光盘到RAM(Disc_copies的情况下)
2.我个人认为,如果我的应用程序是只包含 RAM (ram_copies)表,那么我不需要在我的代码中使用这种方法。现在,我正确地认为,如果我只有 disc_only_copies,我也不需要这个功能。
3.此外,我需要从网络加载mnesia表时,特别是当我的表复制时,这个功能,所以我的应用程序需要等待启动mnesia准备好这些表。但是这仍然只适用于 disc_copies类型的表,因为为什么应用程序完全在光盘上或完全在RAM中需要等待并加载表? disc_copies因为这种类型有事情做与数据在硬盘上拷贝到RAM:与Mnesia的表型打交道时,只需要这个功能
帮助,并检查了我的想法1,2和3。一般情况下:

问题

如果我的表都是分片的,(我总是为每个片段调用这个方法来确保mnesia为我的应用程序做好准备),我是否必须调用每个片段的方法?是ATOMIC或Transactional方法,如果我在mnesia事务中调用它(意思是mnesia会自动加载所有的表片段,如果我单独指定基表)?我的碎片的表格类型对于这个功能是否也很重要?

回答

3

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

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

如果您不使用光盘并且没有复制(即在启动过程中模式始终为空) 您不需要使用wait_for_tables。