Je suis intrigué par le service de base de données Datomic, mais je ne sais pas s'il correspond aux besoins des projets sur lesquels je travaille. Quand Datomic est-il un bon choix et quand faut-il l'éviter?
À la condition que je n'aie pas utilisé Datomic dans la production, j'ai pensé vous donner une réponse.
Je suis sûr que j'en manque de chaque côté, et bien que j'en ai 3 sous les inconvénients, je pense que les avantages les surpassent dans plus de circonstances où les inconvénients n'empêchent pas son utilisation. Le prix est probablement celui qui empêchera son utilisation dans la plupart des petits projets (qui devraient durer plus longtemps que l'essai gratuit d'un an).
Cf. this short post décrivant Datomic simplement pour plus d'informations.
L'expressivité (c.f. Datalog) et l'immuabilité sont impressionnantes. C'est SO très amusant de travailler avec Dataomic à cet égard, et vous pouvez dire qu'il est puissant en l'utilisant un peu.
Une chose importante lors de l'examen si Datomic est la bonne solution pour votre application est de penser à la forme des données que vous allez stocker et interroger - car les faits Datomic sont en fait très similaires à RDF triples ( + notion de temps de première classe) il se prête très bien à la modélisation de relations complexes (données de graphique liées) - quelque chose qui est souvent lourd avec les bases de données SQL traditionnelles. J'ai trouvé que cet aspect était l'un des plus attrayants et importants pour moi, eh bien, même si ce n'est pas quelque chose d'exclusif à Datomic, car il existe de nombreuses autres offres de haute qualité pour les bases de données graphiques, il faut mentionner Neo4J lorsque nous parlons de solutions basées sur JVM.
Concernant le schéma Datomic, je pense que c'est juste le bon équilibre entre flexibilité et stabilité.
Pour compléter les réponses ci-dessus, je tiens à souligner que l'immuabilité et la capacité à se souvenir du passé ne sont pas des "fonctionnalités de sorcellerie" adaptées à quelques cas particuliers comme l'audit. Il s'agit d'une approche qui présente plusieurs avantages importants par rapport aux bases de données de "cellules mutables" (qui représentent aujourd'hui 99% des bases de données). Stuart Halloway le démontre bien dans cette vidéo: le décalage d'impédance est de notre faute .
À mon avis, cette approche est fondamentalement plus saine sur le plan conceptuel. Après l'avoir utilisé pendant plusieurs mois, je ne vois pas que Datomic a des pouvoirs magiques sophistiqués et fous, plutôt un paradigme plus naturel sans certains des gros problèmes des autres.
Voici quelques fonctionnalités de Datomic que je trouve précieuses, dont la plupart sont activées par l'immuabilité:
Concernant quand ne pas utiliser Datomic, voici les contraintes et limitations actuelles que je vois:
Donc, ma réponse très vague et informelle serait que Datomic est un bon choix pour la plupart des applications non triviales dont la charge d'écriture est raisonnable et vous n'avez pas de problème avec la licence et la JVM =.
Par analogie, vous pouvez vous poser la même question pour Git par rapport à d'autres systèmes de contrôle de version qui ne sont pas basés sur l'immuabilité.
Juste pour ajouter provisoirement aux autres réponses:
Il est probablement juste de dire que la datomique présente le meilleur cadre conceptuel pour un magasin de données interrogeable de toutes les autres options actuelles, tout en étant partiellement évolutif et pas exceptionnellement performant.
Je dis seulement partiellement évolutif, car les requêtes doivent tenir dans l'homologue RAM ou échouer. Et pas exceptionnellement performant, car les moteurs SQL de premier ordre peuvent optimiser les requêtes pour qu'elles tiennent en mémoire grâce à des plans d'exécution sophistiqués, ce que je n'ai pas encore vu mentionné comme une caractéristique de la datomic; Le découplage de la transaction et de l'interrogation de Datomic pourrait dans l'ensemble compenser cette fonctionnalité.
Contrairement à de nombreux moteurs NoSQL, les transactions sont un citoyen de première classe, ce qui le place au même niveau que les systèmes SGBDR à cet égard.
Pour les applications où les données sont lues plus qu'écrites, des transactions sont nécessaires, les requêtes tiennent toujours en mémoire ou la mémoire est très bon marché, et la taille globale des données accumulées n'est pas trop grande , cela peut être un gagner là où un produit exclusivement commercial peut être offert - pour ceux qui sont prêts à adopter son nouveau cadre conceptuel impliqué dans l'API.