我已经有一段时间使用了失忆症。我不得不承认,我觉得自己不完全了解mnesia:wait_for_tables/2的概念。引用以下文档说明:某些应用程序需要等待某些表可访问才能进行繁琐的工作。 mnesia:wait_for_tables/2挂起,直到可以访问“选项卡列表”中的所有表或达到超时为止。
现在,对于我开发的所有应用程序,我都必须在启动后端时调用它。在上面的文档中,"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为我的应用做好准备),我是否必须为每个片段调用该方法?如果我在mnesia事务中调用它,则是ATOMIC还是Transactional方法(这意味着如果我仅指定基表,mnesia将自动加载所有表片段)?我的片段的表类型是否也与此功能有关?
最佳答案
启动mnesia时,mnesia会将所有应加载的表排队
从光盘还是从网络。
mnesia:wait_for_tables/2为您提供了一个同步点,因此您不必
轮询表是否已准备好使用。
如果您不使用光盘且不进行复制,则(即架构在启动过程中始终为空)
您不需要使用wait_for_tables。
关于erlang - mnesia:wait_for_tables/2,我真的了解吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8019892/