Requisitos de serviços de armazenamento
Os serviços de armazenamento da Datomic geralmente devem atender a 3 requisitos:
- Implementar a semântica do armazenamento de valor-chave :acesso eficiente de leitura/gravação usando valores de chaves indexadas
- Suporte para leituras consistentes . por exemplo. leia suas próprias escritas. Idealmente, leituras sem contenção/sem bloqueios.
- Suporte puts condicionais . por exemplo. bloqueio otimista + isolamento de instantâneo.
O Datomic usa serviços de armazenamento para armazenar blocos de datoms compactados e classificados, semelhante à maneira como os sistemas de banco de dados tradicionais usam sistemas de arquivos e os requisitos acima são praticamente a API entre o serviço de armazenamento subjacente e o Datomic. Portanto, a escolha em serviços de armazenamento dependem de como eles suportam esses três requisitos .
Escalabilidade de gravação
O Datomic geralmente não coloca muita pressão de gravação no serviço de armazenamento subjacente, pois há apenas um componente gravando nele, o Transactor. Além disso, o Datomic usa um trabalho de indexação em segundo plano para integrar novidades no armazenamento, uma vez que o suficiente tenha sido acumulado (por padrão ~ 32 MB, mas pode ser configurado), o que reduz ainda mais a carga de gravação constante. A única coisa que o Datomic grava imediatamente é o log de transações.
Escalabilidade de leitura
O Datomic usa várias camadas de cache, ou seja, memcached e cache de pares, portanto, em circunstâncias ideais, ou seja, quando o conjunto de trabalho cabe na memória, os sistemas também não colocam muita pressão de leitura.
Carregamento do sistema
Se o seu sistema não requer enorme escalabilidade de gravação e os dados do seu aplicativo tendem a caber na memória, a escolha de um serviço de armazenamento específico é irrelevante exceto, é claro, por suas capacidades operacionais (backups, ferramentas administrativas, etc.) que nada têm a ver com o Datomic.
Se, por outro lado, seu sistema exigir enorme escalabilidade de gravação ou você tem um grande número de pares, cada um deles trabalhando com mais dados do que pode caber em sua memória (forçando muitos segmentos de dados a serem trazidos do armazenamento), você precisará de um sistema de armazenamento que possa ser dimensionado horizontalmente, por exemplo. DynamoDB. Como mencionado em um dos comentários, se você precisar de escalabilidade de gravação arbitrária, o Datomic não é o sistema certo para você.