Digamos que tiene una tabla mnesia replicada en los nodos A y B. Si en el nodo C, que no contiene una copia de la tabla, hago mnesia:change_config(extra_db_nodes, [NodeA, NodeB])
, y luego en el nodo CI do mnesia:dirty_read(user, bob)
cómo elige el nodo C qué copia de nodo de la tabla para ejecutar una consulta?En un clúster de mnesia, ¿qué nodo se consulta?
Respuesta
Según mi propia investigación, la respuesta a la pregunta es - elegirá el nodo conectado más recientemente. Estaré agradecido por señalar los errores si los encuentra - ¡mnesia es un sistema realmente complejo!
Como Dan Gudmundsson pointed out en la lista de correo el algoritmo de selección del nodo remoto a consultar se define en mnesia_lib:set_remote_where_to_read/2
. Es el siguiente
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.
por lo que obtiene la lista de active_replicas (es decir, la lista de candidatos), se encoge opcionalmente la lista de dominar los nodos de la tabla, eliminar tablas para ser ignorados (por cualquier motivo), se contrae la lista a conectado actualmente nodos y se selecciona en el orden siguiente:
- primer no
disc_only_copies
- Cualquier nodo disponible
el La parte más importante es, de hecho, la lista de active_replicas
, ya que determina el orden de los nodos en la lista de candidatos.
Lista de active_replicas
está formada por las llamadas remotas de mnesia_controller:add_active_replica/*
de nodos recién conectados a viejos nodos (es decir, uno que estaban en el clúster antes), que se reduce a la función add/1
que añade el artículo como la cabeza de la lista.
Por lo tanto respuesta para la pregunta es - se elegirá el nodo conectado más recientemente.
Notas: de revisar la lista de réplicas activas en el nodo dado puede utilizar este (truco sucio) código:
[ {T,X} || {{T,active_replicas}, X} <- ets:tab2list(mnesia_gvar) ].
Bueno, el nodo C necesitaría contactar al nodo A o al nodo B para realizar una consulta. Por lo tanto, el nodo C tendrá que decidir sobre qué copia de tabla ejecutar la consulta.
Si necesita algo más que esto, necesitaría tener algún algoritmo que decidirá en qué nodo consultar, o incluso replicar la tabla en el nodo C (esto normalmente dependerá de qué tipo de características desee/necesite)
Si el nodo A y el nodo B forman o forman parte de un clúster de base de datos, un buen comienzo es probablemente el algoritmo round robin (o aleatorio, como usted sugiere).
- 1. nodo de clúster not_exist_already mnesia (esquema)
- 2. ¿Cómo agregar un nodo a un clúster de mnesia?
- 3. Cuál es la importancia de un Nodo maestro de Mnesia en un clúster
- 4. Cassandra: eliminación de un nodo del clúster
- 5. Expandir un clúster de Cassandra con un nodo adicional: ¿qué puertos deben estar abiertos?
- 6. cómo elimino un nodo adicional
- 7. Acceso a un nodo Mnesia desde otro shell Erlang mientras se está ejecutando
- 8. recuperación mnesia línea de partición de red
- 9. Mnesia: lectura de datos de nodo remotos en el modo {local_content, true}
- 10. ¿Cómo ejecutar un método programado en un clúster para un nodo y para todos?
- 11. ¿Dónde se encuentran las mesas en Mnesia?
- 12. ¿Cómo eliminar el nodo muerto del clúster Cassandra?
- 13. Seleccionar el nodo en el clúster de cuarzo para ejecutar un trabajo
- 14. ¿Qué es la evaluación de un clúster en WEKA?
- 15. Singleton en entorno de clúster
- 16. ¿Por qué esta consulta XPath no devuelve ningún nodo?
- 17. Alquile un clúster
- 18. Cómo cambiar el nombre del nodo que ejecuta una base de datos de mnesia
- 19. Determine el nodo activo en el clúster de conmutación por error de SQL
- 20. EJB 3.1 singleton en clúster
- 21. Función de clúster de OpenCV cvKMeans2(): ¿qué tipo de centro de clúster hay en la matriz?
- 22. Open MPI/MPICH - ¿Qué sucede si un nodo termina?
- 23. mnesia: mesa de uso intensivo
- 24. ¿Cómo se elimina un nodo en networkx?
- 25. Consulta de XPath para nodo XML con dos puntos en el nombre de nodo
- 26. Diferencia entre grupo y clúster
- 27. Ehcache rendimiento en un gran clúster
- 28. ¿Distribuir Scala sobre un clúster?
- 29. Cómo migrar datos del clúster Cassandra de tamaño N a un clúster de tamaño diferente N +/- M
- 30. Apache Camel con clúster ActiveMQ
comprobar mi mensaje editado, no estoy seguro de cómo esto se aplicaría a lo que pedí Puedo hacer una consulta en el nodo C sin una especificación de ubicación, entonces, ¿cómo elige qué copia de tabla usar? – ryeguy
No entendí que el nodo realmente tenía la tabla en su esquema. ¡Disculpa, me equivoque! –