2011-11-05 15 views
5

Ho usato mnesia per un po 'ora. Devo confessare che mi sembra di non capire esattamente il concetto di mnesia:wait_for_tables/2. Citando la documentazione qui sotto dice questo: mnesia: wait_for_tables/2, lo capisco davvero?

 
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.
Ora, per tutte le applicazioni che ho sviluppato, ho dovuto chiamare questo quando si avvia il mio back-end. Nella documentazione di cui sopra, il contesto di "Some applications" non è stato ampliato bene e questo è dove la mia domanda è.

Questi sono i miei pensieri:
1. attesa in questo metodo significa che stiamo caricando le tabelle mnesia dal dicono che il disco di RAM (caso di Disc_copies)
2. Personalmente ritengo che se la mia domanda è composto solo da RAM (ram_copies) tabelle, quindi non ho bisogno di questo metodo nel mio codice. Ora, ho ragione di pensare che se ho solo disc_only_copies, anche io non ho bisogno di questa funzione.
3. Inoltre, ho bisogno di questa funzione quando carico le tabelle mnesia dalla rete, specialmente quando le mie tabelle sono replicate, quindi le mie app devono attendere l'avvio di mnesia per rendere queste tabelle pronte. Ma questo vale ancora solo per le tabelle di tipo disc_copies perché una applicazione che gira interamente su disco o interamente in RAM deve attendere e caricare le tabelle?

domande:
Aiuto e esaminare i miei pensieri 1, 2 e 3. In generale, è necessaria questa funzione solo quando si tratta di mnesia tipo di tabella: disc_copies dal momento che questo tipo ha qualcosa a che fare con la copia dei dati su disco e RAM?

Se le mie tabelle sono tutte frammentate, (ho sempre chiamato questo metodo per ogni frammento per garantire che mnesia lo renda pronto per le mie app), devo chiamare il metodo per frammento? è il metodo ATOMIC o Transactional se lo chiamo all'interno di una transazione mnesia (nel senso che mnesia caricherà automaticamente tutti i frammenti delle tabelle se specificherò solo la tabella di base)? il tipo di tabella dei miei frammenti conta anche su questa funzione?

risposta

3

All'avvio di mnesia, mnesia accoda tutte le tabelle che devono essere caricate dal disco o dalla rete.

mnesia: wait_for_tables/2 fornisce un punto di sincronizzazione in modo da non dover eseguire il polling se le tabelle sono pronte per essere utilizzate.

Se non si utilizza il disco e nessuna replica (ovvero lo schema è sempre vuoto durante l'avvio) non è necessario utilizzare wait_for_tables.