mnesia: wait_for_tables / 2, я действительно понимаю это? - PullRequest
5 голосов
/ 05 ноября 2011

Я уже некоторое время пользуюсь мнезией. Я должен признаться, что мне кажется, что я не совсем понимаю концепцию mnesia: wait_for_tables / 2 . Цитирование документации, приведенной ниже, говорит об этом:

Some applications need to wait for certain tables to be accessible in order to do<br>useful work. mnesia:wait_for_tables/2 hangs until all tables in the Tab List are<br>accessible, or until timeout is reached.
Теперь для всех приложений, которые я разработал, мне приходилось вызывать это при запуске моего бэкэнда. В документации, приведенной выше, контекст "Some applications" не был расширен, и вот где мой вопрос.

Вот мои мысли:
1. Ожидание в этом методе означает, что мы загружаем таблицы мнезий, скажем, с диска в ОЗУ (случай Disc_copies)
2. Лично я считаю, что если мое приложение состоит только из RAM (ram_copies) таблиц, то мне не нужен этот метод в моем коде. Теперь я прав, что если у меня есть только disc_only_copies, мне также не нужна эта функция.
3. Кроме того, мне нужна эта функция при загрузке таблиц мнезии из сети, особенно когда мои таблицы реплицируются, поэтому мои приложения должны ждать запуска mnesia, чтобы подготовить эти таблицы. Но это относится только к таблицам типа disc_copies, так как зачем приложению, работающему полностью на диске или в оперативной памяти, ждать и загружать таблицы?

questions :
Помогите и изучите мои мысли 1, 2 и 3. В общем, эта функция необходима только при работе с типом таблицы mnesia: disc_copies, так как этот тип имеет отношение к копирование данных на диск и в ОЗУ?

Если все мои таблицы фрагментированы (я всегда вызывал этот метод для каждого фрагмента, чтобы mnesia подготовил его для своих приложений), нужно ли вызывать метод для фрагмента ? метод ATOMIC или Транзакционный, если я вызываю его в транзакции mnesia (это означает, что mnesia автоматически загрузит все фрагменты таблиц, если я укажу только базовую таблицу)? имеет ли значение тип таблицы моих фрагментов для этой функции?

1 Ответ

3 голосов
/ 10 августа 2012

При запуске mnesia mnesia просто ставит в очередь все таблицы, которые должны быть загружены с диска или из сети.

mnesia: wait_for_tables / 2 дает вам точку синхронизации, поэтому вам не нужно запрашиватьтаблицы готовы к использованию.

Если вы не используете диск и не используете репликацию (т. е. схема всегда пуста во время запуска), вам не нужно использовать wait_for_tables.

...