Si vous êtes intéressé par les avantages que vous pouvez obtenir de l'immuabilité dans une base de données, ou au moins une base de données qui offre l'illusion de l'immuabilité, consultez Datomic.
Datomic est une base de données inventée par Rich Hickey en alliance avec Think Pertinence, il existe de nombreuses vidéos où elles expliquent l'architecture, les objectifs, le modèle de données. Recherchez infoq, l'un en particulier s'intitule Datomic, Database as a Value . Dans confreaks, vous pouvez trouver une keynote que Rich Hickey a donnée lors de la conférence euroclojure en 2012. confreaks.com/videos/2077-euroclojure2012-day-2-keynote-the-datomic-architecture-and-data-model
Il y a une discussion sur vimeo.com/53162418 qui est plus orientée vers le développement.
En voici un autre de stuart halloway à.pscdn.net/008/00102/videoplatform/kv/121105techconf_close.html
- Datomic est une base de données de faits dans le temps, appelées datums, en 5 tuples [E, A, V, T, O]
- E Identifiant d'entité
- Un nom d'attribut dans l'entité (peut avoir des espaces de noms)
- V Valeur de l'attribut
- T ID de transaction, avec cela vous avez une notion de temps.
- O Une opération d'assertion (valeur actuelle ou actuelle), de rejet (valeur passée);
- Utilise son propre format de données, appelé EDN (Extensible Data Notation)
- Les transactions sont ACID
- Utilise le journal de données comme langage de requête, qui est déclaratif en tant que requêtes récursives SQL +. Les requêtes sont représentées avec des structures de données, et étendues avec votre langage jvm, vous n'avez pas besoin d'utiliser clojure.
- La base de données est découplée en 3 services distincts (processus, machines):
- Transaction
- Espace de rangement
- Moteur de requête.
- Vous pouvez séparément, mettre à l'échelle chaque service.
- Ce n'est pas open source, mais il existe une version gratuite (comme dans la bière) de Datomic.
- Vous pouvez indiquer un schéma flexible.
- l'ensemble d'attributs est ouvert
- ajouter de nouveaux attributs à tout moment
- aucune rigidité dans la définition ou la requête
Maintenant, puisque les informations sont stockées en tant que faits dans le temps:
- tout ce que vous faites est d'ajouter des faits à la base de données, vous ne les supprimez jamais (sauf si la loi l'exige)
- vous pouvez tout mettre en cache pour toujours. Query Engine, réside dans le serveur d'applications en tant que base de données en mémoire (pour les langues jvm, les langues non jvm ont accès via une API REST.)
- vous pouvez interroger à partir du temps dans le passé.
La base de données est une valeur et un paramètre pour le moteur de requête, le QE gère la connexion et la mise en cache. Étant donné que vous pouvez voir la base de données comme une valeur et une structure de données immuable en mémoire, vous pouvez la fusionner avec une autre structure de données faite à partir de valeurs "dans le futur" et la transmettre au QE et à la requête avec des valeurs futures, sans changer la base de données réelle .
Il y a un projet open source de Rich Hickey, appelé codeq , vous pouvez le trouver dans github Datomic / codeq, qui étend le modèle git, et stocke les références aux objets git dans une base de données sans données, et faites des requêtes sur votre code, vous peut voir un exemple d'utilisation de datomic.
Vous pouvez considérer la datomique comme un NoSQL ACID, avec des datums vous pouvez modéliser des tableaux ou des documents ou des magasins Kv ou des graphiques.