В mnesia кластере, какой узел запрашивается?

Вставка видео в HTML выглядит следующим образом:

<video width="320" height="240" controls>
  <source src="../static/data/israel/jerusalem.mp4" type="video/mp4">
</video>
13
задан ryeguy 7 April 2009 в 14:18
поделиться

2 ответа

Согласно моему собственному ответу исследования для вопроса - он выберет последний раз связанный узел. Я буду благодарен за указание, что ошибки, если найдено - mnesia являются действительно сложной системой!

Как Dan Gudmundsson указал на алгоритме списка рассылки выбора удаленного узла для запросов, определяется в mnesia_lib:set_remote_where_to_read/2. Это следующее

set_remote_where_to_read(Tab, Ignore) ->
    Active = val({Tab, active_replicas}),
    Valid =
       case mnesia_recover:get_master_nodes(Tab) of
           [] ->  Active;
           Masters -> mnesia_lib:intersect(Masters, Active)
       end,
    Available = mnesia_lib:intersect(val({current, db_nodes}), Valid -- Ignore),
    DiscOnlyC = val({Tab, disc_only_copies}),
    Prefered  = Available -- DiscOnlyC,
    if
       Prefered /= [] ->
           set({Tab, where_to_read}, hd(Prefered));
       Available /= [] ->
           set({Tab, where_to_read}, hd(Available));
       true ->
           set({Tab, where_to_read}, nowhere)
    end.

Таким образом, это получает список active_replicas (т.е. список кандидатов), дополнительно уменьшает список к главным узлам для таблицы, удалите таблицы, которые будут проигнорированы (по любой причине), уменьшает список к в настоящее время связанным узлам и затем выбирает в следующем порядке:

  1. Сначала не -disc_only_copies
  2. Любой доступный узел

Самая важная часть является на самом деле списком active_replicas, так как это определяет порядок узлов в списке кандидатов.

Список active_replicas формируется удаленными вызовами mnesia_controller:add_active_replica/* от недавно связанных узлов до старых узлов (т.е. тот, которые были в кластере прежде), который сводится к функции add/1 который добавляет объект как заголовок списка.

Следовательно ответ для вопроса - он выберет последний раз связанный узел.

Примечания: Для проверки списка активных копий на данном узле, можно использовать это (грязный взлом) код:

[ {T,X} || {{T,active_replicas}, X} <- ets:tab2list(mnesia_gvar) ]. 
14
ответ дан 2 December 2019 в 00:47
поделиться

Ну, узел C должен был бы связаться или с узлом A или с узлом B, чтобы сделать запрос. Таким образом узел C должен будет решить себя который копия таблицы выполнить запрос на.

Если бы Вам нужно что-то большее, чем это у Вас должен был бы или быть некоторый алгоритм, который решит, какой узел запросить на, или даже копируют таблицу на узле C (это обычно зависело бы от того, какие характеристики Вы хотите / потребность).

Если узел A и узел B формируются или являются частью кластера баз данных, хорошее начало является, вероятно, круговым алгоритмом (или случайный, как Вы предполагаете).

-1
ответ дан 2 December 2019 в 00:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: