如何判斷模式中沒有的表與尚未加載的表之間的區別?mnesia表不存在vs表未加載
我目前使用mnesia:wait_for_tables()與一個相對較大的超時檢測表,但這是鬆散的(如果表實際需要很長時間才能開始)和耗時(如果表是真的不在那裏)。
如何判斷模式中沒有的表與尚未加載的表之間的區別?mnesia表不存在vs表未加載
我目前使用mnesia:wait_for_tables()與一個相對較大的超時檢測表,但這是鬆散的(如果表實際需要很長時間才能開始)和耗時(如果表是真的不在那裏)。
也許嘗試...
lists:member(table_name, mnesia:table_info(schema, tables)).
這只是一種猜測,但它可能是一個實驗的基礎上,如果沒有其他人有一個明確的答案。
mnesia:table_info/2可能會有幫助。
如果你事先知道表名和你想知道哪個節點有數據,
mnesia:table_info(TableName, StorageType).
StorageType應該是
ram_copies, disc_copies or disc_only_copies.
一個或者,如果你想要知道本地節點有表副本,只需要
mnesia:table_info(TableName, storage_type).
如果本地節點沒有副本,則返回「未知」。
如果該表完全不在模式中,table_info()將引發一個退出異常而不是「未知」。 – goertzenator 2011-05-10 15:14:50
Thakns發表評論。我只考慮表格存在的情況。包括案例表不存在任何地方,使用mnesia:table_info和catch。 – shino 2011-05-17 04:57:09
這似乎適用於我。我唯一遺留的擔心是,此時可能不會加載模式表,所以爲了對抗這種風險,我在調用table_info()之前添加了mnesia:wait_for_tables([schema],2000)。我現在很滿意。 – goertzenator 2011-05-10 15:11:58