¿Cómo se compara Datomic con Neo4j?


Estoy buscando integrar Neo4j en un sistema Clojure que estoy construyendo. La primera pregunta que me hicieron fue por qué no usé Datomic. ¿Alguien tiene una buena respuesta para esto? He escuchado y visto videos sobre Datomic, pero no conozco lo suficiente sobre Bases de datos de gráficos para saber la diferencia entre Neo4j y Datomic, y qué diferencia haría para mí?

Author: Zubair, 2013-07-27

1 answers

Hay algunas diferencias fundamentales entre ellos:

Modelo de datos

Tanto Neo4j como Datomic pueden modelar relaciones arbitrarias. Ambos usan, efectivamente, un esquema EAV (entity-attribute-value) para que ambos puedan modelar muchos de los mismos dominios problemáticos exceptoEl esquema EAV de Datomic también incorpora una dimensión de tiempo (es decir, EAVT) que lo hace muy poderoso si desea realizar consultas eficientes contra su base de datos en puntos arbitrarios en el tiempo. Esto es algo que los almacenes de datos no inmutables (Neo4j incluido) simplemente no podrían hacer.

Acceso a los datos

Tanto Neo4j como Datomic proporcionan API transversales y lenguajes de consulta:

Consultas

Tanto Neo4j como Datomic proporcionan lenguajes de consulta declarativos (Cypher y Datalog, respectivamente) que admiten consultas recursivas excepto El Datalog de Datomic proporciona capacidades de consulta muy superiores al permitir que se implementen funciones de filtrado y agregación personalizadas como código JVM arbitrario. En la práctica, esto significa que las funciones incorporadas de Cypher pueden ser reemplazadas efectivamente por la biblioteca de secuencias de Clojure . Esto es posible porque su aplicación, no la base de datos, es la que ejecuta las consultas.

Recorrido

Las API de recorrido son siempre impulsadas por código de aplicación, lo que significa que tanto Neo4j como Datomic pueden recorrer un gráfico utilizando un recorrido arbitrario, filtrado y código de transformación de datos excepto Neo4j requiere una transacción en ejecución que en la práctica significa que está limitada por el tiempo.

Consistencia de los datos

Otra diferencia fundamental es que las consultas datómicas no requieren la coordinación de la base de datos (es decir, sin transacciones de lectura) y siempre funcionan con una instantánea de datos consistente lo que significa que puede realizar múltiples consultas y transformaciones de datos durante un período de tiempo arbitrario y garantizar que sus resultados siempre serán consistentes y que ninguna transacción tiempo de espera (porque no hay ninguno). Una vez más, esto es imposible de hacer en almacenes de datos no inmutables como la gran mayoría de las bases de datos existentes (Neo4j incluido). Esto también se aplica a sus API transversales.

Tanto Neo4j como Datomic son sistemas transaccionales (ACID), pero debido a que Neo4j usa transacciones interactivas tradicionales-usando controles optimistas de concurrencia-, las consultas deben ocurrir dentro de las transacciones (deben coordinarse), lo que impone restricciones de tiempo de espera a sus consultas. En la práctica, esto significa que para consultas muy complejas y de larga duración, terminarás dividiendo tus consultas, para que terminen dentro de ciertos límites de tiempo, renunciando a la consistencia de los datos.

Conjunto de trabajo

Si por alguna razón sus consultas necesitaran involucrar una gran cantidad de datos (más de los que normalmente caben en la memoria) y no pudiera transmitir los resultados (ya que Datomic proporciona API de transmisión), Datomic probablemente no sería una buena opción ya que no estaría aprovechando La arquitectura de Datomic, que obliga a los pares a desalojar constantemente su memoria de trabajo, realizar llamadas de red adicionales y descomprimir segmentos de datos.

 50
Author: a2ndrade,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-28 14:24:27