graph - tablas - graficos bases de datos
¿Las bases de datos de gráficos pueden distribuir datos de manera eficiente a través de los nodos? (2)
Si alguien construye una base de datos en la parte superior de otra base de datos, como lo hizo Twitter, ¿esa base de datos hereda las limitaciones e ineficiencias de la base de datos subyacente?
Estoy interesado específicamente en titán db ( http://thinkaurelius.com ) debido a su pretensión de apoyar la división del conjunto de datos de manera eficiente en todos los nodos.
Afirman que son compatibles con la distribución de datos entre los nodos, debido a la eficiencia de Cassandra. Sin embargo, neo4j afirma que la razón por la que no distribuyen datos entre nodos, sino que duplican el conjunto de datos completo en cada nodo, es porque cualquier recorrido de gráfico que deje un nodo y deba moverse a través de una red ethernet es demasiado lento ser práctico.
Dado que cassandra no tiene conocimiento del gráfico, no puede optimizar para mantener los cruces gráficos en un nodo. Por lo tanto, la mayoría de los cruces de gráficos estarán a través de los límites del nodo.
¿Los titanes pretenden escalar de manera eficiente a través de los nodos?
Buena pregunta. Creo que esto se trata de calibrar. Twitter (que usa Cassandra) usa una base de datos de gráficos de una manera muy específica (solo tienen dos niveles de "profundidad") para que las consultas no tengan que atravesar gráficos largos (y no están obligados a replicar todo el conjunto de datos). Creo que tanto Titan como Neo4j tienen razón, Neo4j intenta proporcionar una base de datos de gráficos para propósitos generales, por lo que tiene múltiples soluciones dependiendo de cómo la use y no puede saber cómo las personas la usarán para que apliquen la solución más común: replicando todo el conjunto de datos.
De hecho, si no replicas el conjunto de datos completo y deseas recorrer una ruta larga en tu gráfico, será lento.
Entonces, ¿cuál será tu uso? Nunca usé Titán, pero una buena prueba sería comparar su desempeño con Neo4j dependiendo de la "profundidad" de las consultas.
Titan determina el orden de clasificación clave del backend de almacenamiento subyacente (BOP para Cassandra, por defecto para HBase) y luego asigna ids a vértices de manera que los vértices que están asignados al mismo bloque de partición tienen identificadores que están asignados a la misma máquina física. En otras palabras, Titan "entiende" cómo el backend de almacenamiento subyacente distribuye los datos y usa técnicas de división de gráficos que explotan esta conciencia. Titan usa partición semiautomática que incorpora conocimiento de dominio.
En el benchmark de Pearson ( http://arli.us/edu-planet-scale ), el gráfico se particionó de acuerdo con las universidades, que es un criterio de partición casi óptimo para este conjunto de datos en particular. Sin particiones, escalar a 120 mil millones de bordes sería casi imposible.
Titan se basa en tecnologías comprobadas (para escala, persistencia, respaldo en caliente, disponibilidad, recuperación de desastres, etc.) mientras innova en la capa de gráfico. Esta es la misma ruta que ambos, Twitter''s Flock y Facebook''s Tao, han tomado. Si bien esto significa que Titán es más lento en cruces muy profundos, sí permite que Titán se escale a gráficos muy grandes o a muchas transacciones simultáneas (de lectura y escritura).