Nos gustaría fragmentar un grafo dirigido ponderado,de particiones en un gráfico dirigido ponderado (más de base de datos clave/valor)
el usuario puede añadir nodos y los bordes de forma dinámica, en un principio el DB/gráfico está vacío.
Conservamos los nodos y bordes en una base de datos clave/valor (probablemente Redis): para cada nodo, tendremos el nodeId como la clave y un conjunto ordenado de claves de nodos referenciados el puntaje de cada nodeId en sortedSet es el peso del borde.
(Véase la pregunta con respecto a ese aquí: Redis: Implement Weighted Directed Graph)
No tenemos una restricción de equilibrio, la acción más común sobre el gráfico es Dijkstra, y que tenía como para minimizar la E/S (en nuestra red caso)
Posible solución: cada servidor de base de datos contiene una lista de otros servidores con IPs:
clave: server1, valor: .... 250.1
clave: servidor2, valor: .... 250.2
clave: servidor3, valor: .... 250.3
y cada NODEID será serverX.originalNodeId
¿Cuál sería el algoritmo que decide qué nodo va a donde? ¿Deberíamos apoyar el reposicionamiento de un nodo?
supongo que el enfoque ingenuo sería, añadir el nodo A al servidorX donde argmax (# de nodos de servidor X que tienen bordes con el nodo A), siempre y cuando servidorX no está totalmente ocupado ..
"Shard"? Debo estar envejeciendo. ¿Qué significa esto? –
http://en.wikipedia.org/wiki/Shard_(database_architecture) – DuduAlul