sobre (2), em clojure a galera gosta de usar exceptions 😞 eu normalmente recorro a either monad. tem uma lib legal com algumas monads implementadas e q é bem mais fácil de usar q o clojure.algo.monads
: https://github.com/funcool/cats
o suporte tá meio largado, mas ainda acho q vale a pena usar
sobre isolar side effects, normalmente é só organização de código msm (manter funções puras em namespaces separados das impuras). nunca vi nada muito diferente disso
vcs recomendam alguma abstração de sql? eu achei o korma mas parece que o projeto tá abandonado, e não curti muito o yesql e o hugsql..
@matheusashton o criador do ring montou uma essa página que tem várias bibliotecas agrupadas, incluindo alguns agrupamentos relacionados a SQL em geral e a bancos específicos, é bem útil https://www.clojure-toolbox.com/
até agora só usei o datomic e mongodb com clojure, então não saberia te recomendar, mas acredito que essa página deva ajudar
é tranquilo usar o datomic? eu olhei a doc dele e pareceu uma opção muito complicada
entender como os dados são armazenados dá um trabalho e a documentação falha um pouco, mas existe palestras do rich hickey que explicam bem como o banco funciona e pra mim foram valiosas como uma introdução. depois você também precisa aprender a usar a linguagem de consulta que é o datalog, o http://learndatalogtoday.org é bem útil nisso, e você consegue complementar algumas dúvidas com as documentações. no final, aprender a se expressar no datalog foi o mais complicado pra mim, mas consegui
algo que eu ainda não consegui resolver no datomic, e que talvez seja um ponto a pensar antes de adotar ele em um projeto, é o fato de que todas as consultas são feitas em memória e que não é possível paginar os resultados das consultas através da sintaxe do datalog, então você acaba tendo que paginar através do clojure os dados retornados da consulta (usando as funções take
e subvec
por exemplo). portanto você precisa ter RAM o suficiente para a sua aplicação conseguir manter em memória por um tempo o resultado das queries, até que você faça a paginação, o que eu imagino que possa causar problemas quando o retorno da sua consulta é muito grande.
(existem alguns workarounds utilizando uma api de mais baixo nível, mas a complexidade aumenta também)
Você tem como usar o Datomic no modo server também
estou fazendo isso, e usando ele em memória para executar os testes unitários
Eu tou lendo sobre o JanusGraph + Tinkerpop pra usar no meu projeto pessoal. 🙂
parece interessante, pelo visto esse tinkerpop é a linguagem de consulta né
Sim, eu Já usei o Neo4J e gostei bastante de grafos… queria tentar uma alternativa free. 🙂
Já que vou usar cassandra e o Janus usa o Cassandra pra storage, tá na ideia