2011-11-05 5 views
5

나는 지금 당분간 흉골을 사용했다. 내가 정확히 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이 방법에 대기 내가 개인적으로 생각
2 (Disc_copies의 경우) 디스크가 RAM에 말에서 우리는 mnesia 테이블을로드하는 것을 의미 내 응용 프로그램의 경우 유일한 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를 사용할 필요가 없습니다.