¿Cuándo debo usar Datomic?


Estoy intrigado en el servicio de base de datos Datomic, pero no estoy seguro de si se ajusta a las necesidades de los proyectos en los que trabajo. ¿Cuándo es Datomic una buena opción y cuándo debe evitarse?

Author: Mantas Vidutis, 2014-01-21

4 answers

Con la condición de que no he usado Datomic en producción, pensé en darte una respuesta.

Ventajas

  1. Las consultas Datalog son potentes (más que SQL no recursivo) y muy expresivas.
  2. Las consultas se pueden escribir con estructuras de datos Clojure, y NO es un DSL débil como muchas bibliotecas SQL que le permiten realizar consultas con estructuras de datos.
  3. Es inmutable, por lo que obtienes las ventajas que la inmutabilidad te da en Clojure / otros idiomas también un. Esto también le permite almacenar, mientras guarda estructuras, todos los hechos pasados en su base de datos-esto es MUY útil para auditar y más

Desventajas

  1. Puede ser lento, ya que Datalog solo va a ser más lento que SQL equivalente (suponiendo que se pueda escribir una sentencia SQL equivalente).
  2. Si está escribiendo MUCHO, tal vez deba preocuparse por que el único transactor se vea abrumado. Esto parece poco probable para la mayoría de los casos, pero es algo en lo que pensar (usted sin embargo, podría hacer una especie de fragmento y probablemente salvarse a sí mismo; pero esto no es una base de datos para, por ejemplo, almacenar datos de garrapatas de stock).
  3. Es un poco difícil de poner en marcha, y es caro, y la licencia y el precio hace que sea difícil usar una instancia alojada con él: tendrá que lidiar con sysadminning esto usted mismo en lugar de usar algo como Postgres en Heroku o Mongo en MongoHQ

Estoy seguro de que me faltan algunos en cada lado, y aunque tengo 3 en la lista desventajas, creo que las ventajas superan a ellos en más circunstancias donde las desventajas no impiden su uso. El precio es probablemente el que evitará que se use en la mayoría de los proyectos pequeños (que espera durar más que la prueba gratuita de 1 año).

Cf. este breve post que describe Datomic simplemente para más información.

La expresividad (c. f.Datalog) y la inmutabilidad son impresionantes. Es muy divertido trabajar con Dataomic en ese sentido, y se puede decir es poderoso con solo usarlo un poco.

 37
Author: Isaac,
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
2014-12-29 20:20:32

Una cosa importante al considerar si Datomic es el ajuste correcto para su aplicación es pensar en la forma de los datos que va a almacenar y consultar - como los hechos Datomic son realmente muy similares a los triples RDF (+ noción de tiempo de primera clase) se presta muy bien para modelar relaciones complejas (datos de gráficos vinculados) - algo que a menudo es engorroso con las bases de datos SQL tradicionales. Me pareció que este aspecto era uno de los más atractivos e importantes para mí, funcionó muy bien, incluso si esto no es, por supuesto, algo exclusivo de Datomic, ya que hay muchas otras ofertas de alta calidad para bases de datos de gráficos, hay que mencionar Neo4J cuando estamos hablando de soluciones basadas en JVM.
En cuanto al esquema Datomic, creo que es el equilibrio correcto entre flexibilidad y estabilidad.

 16
Author: janherich,
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
2014-01-21 09:46:38

Para completar las respuestas anteriores, me gustaría enfatizar que la inmutabilidad y la capacidad de recordar el pasado no son 'características de magia' adecuadas para algunos casos especiales como la auditación. Es un enfoque que tiene varios beneficios profundos en comparación con las bases de datos de "células mutables" (que son el 99% de las bases de datos hoy en día). Stuart Halloway lo demuestra muy bien en este video: el Desajuste de Impedancia es nuestra culpa.

En mi opinión personal, este enfoque es fundamentalmente más cuerdo conceptualmente. Después de usarlo durante varios meses, no veo que Datomic tenga poderes mágicos sofisticados locos, más bien un paradigma más natural sin algunos de los grandes problemas que tienen los demás.

Aquí hay algunas características de Datomic que encuentro valiosas, la mayoría de las cuales están habilitadas por la inmutabilidad:

  1. debido a que la lectura no es remota, no tiene que diseñar sus consultas como una expedición por cable. En particular, puede separar las preocupaciones en varias consultas (por ejemplo, encontrar el entidades que son la entrada a mi consulta-responder a alguna pregunta de negocios sobre estas entidades-obtener datos asociados para presentar el resultado)
  2. el esquema es muy flexible, sin sacrificar la potencia de consulta
  3. es cómodo tener sus consultas integradas en su lenguaje de programación de aplicaciones
  4. la API de Entidad te trae las partes buenas de OR
  5. el lenguaje de consulta es programable y tiene primitivas para la abstracción y reutilización (reglas, predicados, funciones de base de datos)
  6. performance: los escritores impiden solo a otros escritores, y nadie impide a los lectores. Además, mucho almacenamiento en caché.
  7. ... y sí, algunas superpotencias como viajar al pasado, escribir especulativas o ramificar la realidad.

Con respecto a cuándo no para usar Datomic, aquí están las restricciones y limitaciones actuales que veo:

  1. tienes que estar en la JVM (también hay una API REST, pero pierdes la mayoría de los beneficios IMO)
  2. no adecuado para escala de escritura, ni grandes volúmenes de datos
  3. no estará especialmente integrado en frameworks, por ejemplo, actualmente no encontrará una biblioteca que genere endpoints de REST CRUD a partir de un esquema Datómico
  4. es una base de datos comercial
  5. dado que la lectura ocurre en el proceso de aplicación (el 'Peer'), debe asegurarse de que el Peer tenga suficiente memoria para contener todos los datos que necesita para atravesar en una consulta.

Así que mi respuesta muy vaga e informal sería que Datomic es una buena opción para la mayoría de las aplicaciones no triviales cuya carga de escritura es razonable y no tiene ningún problema con la licencia y estar en la JVM.

Como analogía, puede hacerse la misma pregunta para Git en comparación con otros sistemas de control de versiones que no se basan en la inmutabilidad.

 10
Author: Valentin Waeselynck,
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
2016-02-02 14:57:25

Solo para agregar tentativamente sobre las otras respuestas:

Probablemente sea justo decir que datomic presenta el mejor marco conceptual para un almacén de datos consultable de todas las demás opciones actuales, mientras que es parcialmente escalable y no excepcionalmente eficiente.

Digo solo parcialmente escalable, porque las consultas deben caber en la RAM del par o fallar. Y no excepcionalmente de rendimiento, ya que los motores SQL de primera categoría pueden optimizar las consultas para que quepan en la memoria a través de planes de ejecución sofisticados, algo que aún no he visto mencionado como una característica en datomic; desacoplamiento de Datomic de transacciones y consultas podría en el offset general de esta característica.

Sin embargo, a diferencia de muchos motores NoSQL, las transacciones son un ciudadano de primera clase, lo que lo pone a la par con los sistemas RDBMS en ese aspecto clave.

Para aplicaciones donde los datos se leen más que se escriben, se necesitan transacciones, las consultas siempre caben en la memoria o la memoria es muy barata, y el tamaño de los datos acumulados no es demasiado grande, podría ser una victoria donde se pueda permitir un producto solo comercial, para aquellos que están dispuestos a adoptar su nuevo marco conceptual implícito en la API.

 3
Author: matanster,
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
2017-08-14 19:32:44