2011-11-05 13 views
5

Od pewnego czasu używam mezji. Muszę przyznać, że czuję, że nie rozumiem dokładnie pojęcia mnesia:wait_for_tables/2. Zacytowanie poniższej dokumentacji mówi: mnesia: wait_for_tables/2, czy naprawdę to rozumiem?

 
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.
Teraz, dla wszystkich aplikacji, które opracowałem, musiałem zadzwonić do tego podczas uruchamiania mojego backendu. W powyższej dokumentacji kontekst "Some applications" nie został rozwinięty dobrze i to jest moje pytanie.

To są moje myśli:
1. czeka w tej metody oznacza, że ​​mamy do ładowania z tabel mnesia powiedzieć Disc do RAM (przypadek Disc_copies)
2. Osobiście uważam, że jeśli moja aplikacja składa się tylko z tabel RAM (ram_copies), więc nie potrzebuję tej metody w moim kodzie. Teraz mam rację, myśląc, że jeśli mam tylko disc_only_copies, również nie potrzebuję tej funkcji.
3. Potrzebuję tej funkcji również przy ładowaniu tabel mnesii z sieci, zwłaszcza gdy moje tabele są replikowane, więc moje aplikacje muszą czekać na uruchomienie mnesii, aby przygotować te tabele. Ale nadal dotyczy to tylko tabel typu disc_copies, dlaczego aplikacja uruchamiana w całości na dysku lub w całości w pamięci RAM musi czekać i wczytać tabele?

pytania:
Pomoc i zbadać moje myśli 1, 2 i 3. Na ogół jest to funkcja potrzebne tylko wtedy, gdy do czynienia z mnesia typu tabeli: disc_copies ponieważ ten typ ma coś wspólnego z kopiowania danych na dysku i pamięci RAM?

Jeśli moje tabele są pofragmentowane (zawsze nazywałem tę metodę dla każdego fragmentu, aby zapewnić, że mnesia przygotowuje ją do moich aplikacji), czy muszę wywoływać metodę dla fragmentu? jest metoda ATOMIC lub Transactional, jeśli nazywam to w ramach transakcji mnesia (co oznacza, że ​​mnesia automatycznie załaduje wszystkie fragmenty tabel, jeśli określę samą tabelę podstawową)? czy rodzaj tabeli moich fragmentów ma również znaczenie w odniesieniu do tej funkcji?

Odpowiedz

3

Podczas uruchamiania mnesii, mnesia po prostu umieszcza w kolejce wszystkie tabele, które powinny być załadowane z dysku lub z sieci.

mnesia: wait_for_tables/2 daje punkt synchronizacji, więc nie musisz do sondy, jeśli tabela (y) są gotowe do użycia.

Jeśli nie używasz dysku i nie ma replikacji (tzn. Schemat jest zawsze pusty podczas uruchamiania) nie musisz używać wait_for_tables.

Powiązane problemy