Gráfico distribuido: ¿Cuál es la forma más efectiva de distribuir los nodos de un gráfico en diferentes servidores en un sistema distribuido?

Tener miles de millones de nodos y solo millones de bordes indica que muchos nodos están aislados. ¿Es este realmente el caso?

Sin embargo, parece que solo le interesa una carga equilibrada durante el procesamiento. En este caso, definitivamente debe considerar el Hashing simple de nodos a máquinas. Esto da como resultado particiones casi perfectamente equilibradas y es extremadamente rápido.

Si le interesa la localidad de los vértices (lo cual recomendaría encarecidamente) para minimizar la sobrecarga de la comunicación y mejorar la latencia de extremo a extremo, debería considerar la posibilidad de transmitir algoritmos de partición . Este es uno de los documentos clave de KDD 2012.

Por cierto, Victor definitivamente tiene un punto en recomendar la partición de corte de vértice en lugar de la partición de corte de borde. Esto puede resultar en un mejor equilibrio de carga y menos sobrecarga de comunicación para gráficos con distribución de grados sesgada (es decir, la mayoría de los gráficos del mundo real; piense en el número de seguidores de Twitter de Justin Bieber en comparación con cualquier usuario aleatorio de Twitter). Sin embargo, también hay MUCHOS sistemas de gráficos extremadamente escalables basados ​​en corte de bordes (es decir, asignación de vértices) que pueden procesar gráficos de billones de escalas (!). Echa un vistazo a este documento VLDB, por ejemplo.

Los algoritmos de particionamiento de transmisión tienen un tiempo de ejecución lineal y proporcionan una ubicación razonable (es decir, calidad de particionamiento). Para tareas de procesamiento de gráficos de complejidad baja a media, esta clase algorítmica debe estar muy cerca de lo óptimo. Si tiene tareas de procesamiento de gráficos más complejas, puede valer la pena verificar algoritmos más sofisticados que mejoran aún más la localidad, a costa de una mayor inversión de tiempo inicial para la partición.

Tu premisa básica es incorrecta. No debe distribuir los nodos pero debe distribuir los bordes. Lo sé, distribuir los nodos suena como una idea tan intuitiva. Sin embargo, si considera un gráfico como su matriz de conectividad, la distribución de los nodos corresponde a una distribución unidimensional de la matriz, y los analistas numéricos han sabido durante décadas que eso no escala. La distribución de los bordes corresponde a una distribución bidimensional, que sí escala. Si está hablando de miles de millones de nodos, entonces su problema es lo suficientemente grande como para preocuparse por los efectos de escala.

Como dije, los analistas numéricos lo saben desde siempre. Pero como no estamos haciendo “big data” o cualquier palabra de moda del día, las personas que piensan que están haciendo algo radicalmente nuevo (como big data o personas de biocomputación) no hablan con los científicos de computación tradicionales. Como resultado, pierden años reinventando la rueda.

Lo siento, tuve que sacar eso de mi pecho.