postgresql clojure amazon-dynamodb datomic

postgresql - ¿Cómo influye el backend de almacenamiento en Datomic?



clojure amazon-dynamodb (1)

¿Cómo debo elegir el servicio de almacenamiento de back-end para Datomic?

¿Es una cuestión de preferencia seleccionar, digamos, DynamoDB en lugar de Postgres, o cada opción tiene diferentes intercambios? Si es así, ¿Que son?


Requisitos de servicios de almacenamiento

Los servicios de almacenamiento Datomic ''generalmente deben cumplir con 3 requisitos:

  1. Implementar la semántica del almacén de clave-valor : acceso eficiente de lectura / escritura utilizando valores de claves indexadas
  2. Apoyar lecturas consistentes . por ejemplo, lea sus propias escrituras. Idealmente, lecturas sin contención / sin bloqueo.
  3. Soporte de puts condicional por ejemplo, bloqueo optimista + aislamiento de instantáneas.

Datomic utiliza servicios de almacenamiento para almacenar bloques de datos ordenados y comprimidos, de forma similar a como los sistemas de bases de datos tradicionales usan sistemas de archivos y los requisitos anteriores son prácticamente la API entre el servicio de almacenamiento subyacente y Datomic. Por lo tanto, la elección de los servicios de almacenamiento depende de qué tan bien soporten esos tres requisitos .

Escribir escalabilidad

Datomic no suele ejercer demasiada presión de escritura en el servicio de almacenamiento subyacente, ya que solo hay un componente que lo escribe, el Transactor. Además, Datomic utiliza un trabajo de indexación en segundo plano para integrar la novedad en el almacenamiento una vez que se ha acumulado suficiente (de forma predeterminada ~ 32MB pero puede configurarse) lo que reduce aún más la carga de escritura constante. Lo único que Datomic escribe inmediatamente es el registro de transacciones.

Leer escalabilidad

Datomic utiliza varias capas de almacenamiento en caché, es decir, memoria caché de memoria y de compatibilidad entre pares, por lo que en circunstancias ideales, es decir, cuando el conjunto de trabajo se ajusta en la memoria, los sistemas tampoco presionarán demasiado.

Carga del sistema

Si su sistema no requiere una escalabilidad de escritura enorme y los datos de su aplicación tienden a caber en la memoria, entonces la elección de un servicio de almacenamiento particular es irrelevante excepto, por supuesto, por sus capacidades operativas (copias de seguridad, herramientas de administración, etc.) que tienen nada que ver con Datomic.

Si, por otro lado, su sistema requiere una gran escalabilidad de escritura o tiene un gran número de pares, cada uno de ellos trabaja con más datos de los que pueden caber en su memoria (obligando a traer muchos segmentos de datos del almacenamiento), necesitará un sistema de almacenamiento que pueda escalar horizontalmente, por ejemplo, DynamoDB. Como se menciona en uno de los comentarios, si necesita una escalabilidad de escritura arbitraria, Datomic no es el sistema adecuado para usted de todos modos.