2017-06-16 3 views
5

J'ai récemment entendu dire que Datomic, en tant que base de données moderne, peut être excellent pour la modélisation et l'évolutivité des données. Mais j'en sais peu. La base de données de Datomic suit-elle le théorème CAP?Dans quelle position Datomic se situe-t-il dans le Triangle CAP?

Si oui, dans quelle position réside-t-il dans le triangle CAP?

enter image description here

+0

Vous pouvez lire: https://martin.kleppmann.com/2015/05/11/please-stop-calling-databases-cp-or-ap.html –

+0

Excellent article! Merci pour ça. @ValentinWaeselynck – cmal

Répondre

6

Datomic fournit une sémantique acide et est CP pour les écritures. La particularité de Datomic est qu'il ne partage pas les services de lecture avec les services transactionnels . Vous ne passez pas par le transacteur pour lire et vous n'avez pas besoin de lire les transactions internes à voir les données cohérentes. Cela permet à Datomic de mettre à l'échelle les lectures horizontalement et vous permet de prendre des décisions indépendantes sur la disponibilité en lecture.

Il est intéressant de lire http://docs.datomic.com/acid.html, en particulier la section Implications.

+0

Stu, je pense que cela mérite une réponse plus détaillée que «CP pour les écritures». Peut-être ajouter une explication plus détaillée de pourquoi Datomic ne correspond pas exactement à la définition hypothétique de CAP d'un système de base de données, et comment un système Datomic * dans son ensemble peut éviter les violations de cohérence (Phantom Reads, Stale Reads, Dirty Reads, etc.) en utilisant par exemple 'conn.sync()'. Je serais heureux de l'essayer moi-même, mais il serait plus autoritaire venant des auteurs :) –

+0

Certes, Datomic évite ces violations de cohérence en ayant un seul auteur (et est donc automatiquement linéarisable)? D'après ma compréhension 'conn.sync()' adresse vraiment juste les lectures périmées, et seulement dans le cas où vous lisez d'un pair différent de celui sur lequel l'écriture plus récente a été écrite. (Puisque ce pair aurait l'écriture) –

+0

En fait, après avoir lu plus sur la linéarisation, je dirais que Datomic par défaut a une cohérence séquentielle. Être linéarisable dans son ensemble exigerait que chaque pair voit toujours le résultat de chaque transaction immédiatement après son écriture. Je pense que c'est réalisable avec 'conn.sync()' au prix d'une latence supplémentaire. –