Requisitos de los servicios de almacenamiento
Los servicios de almacenamiento de Datomic generalmente deben cumplir 3 requisitos:
- Implementar semántica de almacenamiento de clave-valor :acceso eficiente de lectura/escritura utilizando valores de claves indexadas
- Admite lecturas consistentes . p.ej. lee tus propios escritos. Idealmente, lecturas sin contención/sin bloqueos.
- Admite ventas condicionales . p.ej. bloqueo optimista + aislamiento de instantáneas.
Datomic usa servicios de almacenamiento para almacenar bloques de datos ordenados y comprimidos, de forma similar a la forma en que 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. Así que la elección en los servicios de almacenamiento dependen de qué tan bien cumplen con esos tres requisitos .
Escalabilidad de escritura
Datomic generalmente no ejerce mucha presión de escritura en el servicio de almacenamiento subyacente, ya que solo hay un componente que escribe en él, 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 lo suficiente (por defecto, ~32 MB, pero se puede configurar), lo que reduce aún más la carga de escritura constante. Lo único que Datomic escribe inmediatamente es el registro de transacciones.
Escalabilidad de lectura
Datomic utiliza múltiples capas de almacenamiento en caché, es decir, memcached y caché de pares, por lo que en circunstancias ideales, es decir, cuando el conjunto de trabajo cabe en la memoria, los sistemas tampoco ejercerán mucha presión de lectura.
Carga del sistema
Si su sistema no requiere enormes escalabilidad de escritura y los datos de su aplicación tienden a caber en la memoria, entonces la elección de un servicio de almacenamiento en particular es irrelevante excepto, por supuesto, por sus capacidades operativas (copias de seguridad, herramientas de administración, etc.) que no tienen nada que ver con Datomic.
Si, por el contrario, su sistema requiere enormes escalabilidad de escritura o tiene una gran cantidad de pares, cada uno de ellos trabajando con más datos de los que pueden caber en su memoria (obligando a traer una gran cantidad de segmentos de datos del almacenamiento), necesitará un sistema de almacenamiento que pueda escalar horizontalmente, p. DynamoDB. Como se menciona en uno de los comentarios, si necesita escalabilidad de escritura arbitraria, Datomic no es el sistema adecuado para usted de todos modos.