BT

Diffuser les Connaissances et l'Innovation dans le Développement Logiciel d'Entreprise

Contribuez

Sujets

Sélectionner votre région

Accueil InfoQ Actualités La Base de Données en tant que Valeur

La Base de Données en tant que Valeur

Lors de QCon New York 2013, Rich Hickey a donné une présentation sur les bases de données fonctionnelles. Hickey est bien connu pour avoir créé le langage de programmation Clojure, il développe actuellement Datomic, une base de données fonctionnelle. Pendant sa présentation, Hickey a soutenu que les propriétés utiles d'un langage fonctionnelle : données en tant que valeurs et pures fonctions, sont aussi utiles dans le contexte des bases de données. Programmer avec des objets, soutient t'il, est très différent. Un objet combine les données et la logique et est comme une machine : il suit un traitement séquentiel et change continuellement son état. Invoquer une méthode sur un objet peut donner un résultat très différent à chaque invocation. Cet état peut changer de manière imprévisible, par exemple parce qu'un thread différent a également une référence vers l'objet et le modifie. Cela rend les programmes objets très difficile à appréhender. Les base de données que nous utilisons aujourd'hui sont très similaires aux objets : un serveur de base de données est une simple entité (éventuellement répliquée) qui change constamment d'état, de logique de requêtage et de transformations, utilisant le concept de transactions pour compenser le manque de valeurs immuables.

Hickey a demandé au public : ne serait il pas agréable d'avoir toute ces propriétés fonctionnelles pour les bases de données également ? Dans un tel monde, la base de données entière serait représentée comme une valeur (immuable), et les requêtes seraient juste des fonctions qui prennent une ou plusieurs base de données comme arguments. La base de données peut être partagée en toute sécurité entre plusieurs threads, et la même requête sur la même valeur de base de données produira toujours le même résultat. Naturellement, comme une base de données immuable n'est pas très utile, un transactor serait utilisé pour faire des changements ou plus précisément : pour produire de nouvelles valeurs de base de données basées sur les précédentes. Un transactor, avec en paramètres une valeur de base de données et un certains nombre de mutations, retourne une nouvelle valeur de base de données. Les programmes peuvent demander à la base de données sa valeur courante à n'importe quel moment. Datomic est une base de données avec ces propriétés.

Cette approche fonctionnelle applique aux bases de données les idées centrales de la programmation fonctionnelle qui consiste à séparer les données de la logique. Les données sont conservées dans un stockage de données "bête", qui peut être un simple stockage clé-valeur comme Amazon's DynamoDB. Un processus transactor coordonne les transactions et est principalement utile quand plusieurs "peers" (terme Datomic pour clients) exécutent des transactions au même moment. Un peer est typiquement intégré dans l'application elle-même comme une librairie Java. Un peer a une connection au transactor pour exécuter les transformations de manière transactionnelle. Les requêtes sont exécutées par le peer lui-même, chargeant à la demande les données du stockage suivant les besoins. Afin de rendre le requêtage plus simple, Datomic supporte Datalog comme langage de requête, celui-ci est un sous-ensemble de Prolog qui est très adapté pour le requêtage de bases de données en mode déclaratif.

Plus d'informations sur Datomic peuvent être trouvées sur son site web. InfoQ a précédemment publié des articles sur l'architecture de Datomic et son modèle de données ainsi que des vidéos de présentations précédentes sur Datomic.

Evaluer cet article

Pertinence
Style

Contenu Éducatif

BT