web-dev-qa-db-fra.com

Quand dois-je utiliser Datomic?

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?

60
Mantas Vidutis

À la condition que je n'aie pas utilisé Datomic dans la production, j'ai pensé vous donner une réponse.

Les avantages

  1. Les requêtes de journal de données sont puissantes (plus que SQL non récursif) et très expressives.
  2. Les requêtes peuvent être écrites avec des structures de données Clojure, et ce n'est PAS un DSL faible comme de nombreuses bibliothèques SQL qui vous permettent d'interroger avec des structures de données.
  3. Il est immuable, vous bénéficiez donc des avantages que l'immuabilité vous offre dans Clojure/d'autres langues également. Cela vous permet également de stocker, tout en enregistrant des structures, tous les faits passés dans votre base de données - cela est TRÈS utile pour l'audit et plus

Désavantages

  1. Cela peut être lent, car Datalog va juste être plus lent que l'équivalent SQL (en supposant qu'une instruction SQL équivalente puisse être écrite).
  2. Si vous écrivez un LOT, vous pourriez peut-être avoir à vous soucier du fait que le seul acteur soit dépassé. Cela semble peu probable dans la plupart des cas, mais c'est quelque chose à penser (vous pouvez faire une sorte d'éclat, cependant, et probablement vous sauver; mais ce n'est pas une base de données pour, par exemple, stocker des données de cotation de stock).
  3. Il est un peu difficile à mettre en place et à utiliser, et c'est cher, et la licence et le prix rendent difficile l'utilisation d'une instance hébergée avec elle: vous devrez gérer vous-même l'administration système au lieu d'utiliser quelque chose comme Postgres sur Heroku ou Mongo à MongoHQ

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.

44
Isaac

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é.

16
janherich

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é:

  1. parce que la lecture n'est pas à distance, vous n'avez pas à concevoir vos requêtes comme une expédition sur le fil. En particulier, vous pouvez séparer les préoccupations en plusieurs requêtes (par exemple trouver les entités qui sont l'entrée de ma requête - répondre à une question commerciale sur ces entités - récupérer les données associées pour présenter le résultat)
  2. le schéma est très flexible, sans sacrifier la puissance des requêtes
  3. il est confortable d'avoir vos requêtes intégrées dans votre langage de programmation d'application
  4. l'API Entity vous apporte les bonnes parties des ORM
  5. le langage de requête est programmable et possède des primitives d'abstraction et de réutilisation (règles, prédicats, fonctions de base de données)
  6. performance: les écrivains n'entravent que les autres écrivains, et personne n'entrave les lecteurs. De plus, beaucoup de mise en cache.
  7. ... et oui, quelques superpuissances aiment voyager dans le passé, les écritures spéculatives ou la réalité branchée.

Concernant quand ne pas utiliser Datomic, voici les contraintes et limitations actuelles que je vois:

  1. vous devez être sur la JVM (il y a aussi une REST API, mais vous perdez la plupart des avantages IMO)
  2. ne convient pas à l'échelle d'écriture, ni aux énormes volumes de données
  3. ne sera pas spécialement intégré dans les frameworks, par exemple, vous ne trouverez pas actuellement une bibliothèque qui génère des points de terminaison CRUD REST à partir d'un schéma Datomic
  4. c'est une base de données commerciale
  5. étant donné que la lecture se produit dans le processus de demande (le "pair"), vous devez vous assurer que le pair a suffisamment de mémoire pour contenir toutes les données dont il a besoin pour traverser dans une requête.

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é.

10
Valentin Waeselynck

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.

3
matanster