#erlang #mnesia
#erlang #mnesia
Вопрос:
Я уже некоторое время использую mnesia. Я должен признаться, что я чувствую, что не совсем понимаю концепцию mnesia:wait_for_tables / 2. Цитируя документацию здесь, ниже, говорится об этом:
Некоторым приложениям необходимо дождаться, пока будут доступны определенные таблицы, чтобы выполнить
полезную работу. mnesia:wait_for_tables / 2 зависает до тех пор, пока не будут
доступны все таблицы в списке вкладок или пока не истечет время ожидания.
Теперь для всех приложений, которые я разработал, мне приходилось вызывать это при запуске моего серверной части. В документации выше контекст "Some applications"
не был расширен должным образом, и вот где мой вопрос.
Это мои мысли:
1. Ожидание в этом методе означает, что мы загружаем таблицы mnesia, скажем, с диска в оперативную память (в случае Disc_copies)
2. Лично я считаю, что если мое приложение состоит только из RAM (ram_copies)
таблиц, то мне не нужен этот метод в моем коде. Теперь, я прав, думая, что если у меня есть только disc_only_copies
, мне также не нужна эта функция.
3. Кроме того, мне нужна эта функция при загрузке таблиц mnesia из сети, особенно когда мои таблицы реплицируются, поэтому моим приложениям нужно дождаться запуска mnesia, чтобы эти таблицы были готовы. Но это все еще применимо только к таблицам типа disc_copies
, так как зачем приложению, работающему полностью на диске или полностью в оперативной памяти, ждать и загружать таблицы?
вопросы:
Помогите и изучите мои мысли 1, 2 и 3. В общем, эта функция нужна только при работе с типом таблицы mnesia: disc_copies
поскольку этот тип имеет какое-то отношение к копированию данных на диске и в оперативной памяти ?
Если все мои таблицы фрагментированы (я всегда вызывал этот метод для каждого фрагмента, чтобы убедиться, что mnesia готовит его для моих приложений), должен ли я вызывать метод для каждого фрагмента? является ли метод АТОМАРНЫМ или транзакционным, если я вызываю его в транзакции mnesia (это означает, что mnesia автоматически загрузит все фрагменты таблиц, если я укажу только базовую таблицу)? имеет ли значение тип таблицы моих фрагментов для этой функции?
Ответ №1:
При запуске mnesia mnesia просто ставит в очередь все таблицы, которые должны быть загружены с диска или из сети.
mnesia:wait_for_tables / 2 предоставляет вам точку синхронизации, поэтому вам не нужно опрашивать, готовы ли таблицы к использованию.
Если вы не используете диск и нет репликации (т. Е. Схема всегда пуста во время запуска), вам не нужно использовать wait_for_tables.