À propos du projet

Datahike est une base de données Datalog durable offrant des API compatibles Datomic et une sémantique de type git. Construite sur des structures de données persistantes avec partage structurel, les instantanés de base de données sont des valeurs immuables qui peuvent être conservées, partagées et interrogées sans verrous ni copie. Capacités clés décrites dans le README : - Distributed Index Space : les lecteurs accèdent directement aux index persistants pour la mise à l'échelle en lecture sans connexions à la base de données. - Stockage flexible via konserve : backends File, LMDB, S3, JDBC, Redis et IndexedDB. - Prise en charge multiplateforme : JVM, Node.js et navigateur, avec des API Clojure, ClojureScript, JavaScript et Java. - Synchronisation en temps réel via WebSocket avec Kabel pour la communication navigateur-serveur. - Time-travel : interrogez n'importe quel état historique avec une piste d'audit complète des transactions. - Purge des données pour la conformité réglementaire (prêt pour le RGPD). - Utilisation en production rapportée avec des milliards de datoms, y compris un déploiement dans des services gouvernementaux. Le projet plaide en faveur de Datalog plutôt que SQL pour les données à forte composante relationnelle : correspondance de motifs sur les relations, requêtes transitives et récursives, et jointures multi-bases de données s'expriment naturellement. L'immuabilité traite la base de données comme un journal de faits en ajout seul, permettant des pistes d'audit, le débogage par time-travel et l'excision de données. L'utilisation est centrée sur une API Clojure (datahike.api) avec create-database, connect, transact, q, history, release et delete-database. L'API vise à être un remplacement direct pour un sous-ensemble de Datomic sur la JVM. La configuration couvre les backends de stockage et la flexibilité du schéma. Les bindings linguistiques en version bêta incluent JavaScript (paquet npm), un outil CLI natif GraalVM (dthk), un pod Babashka, une API Java avec un constructeur fluide, des bindings natifs C/C++ (libdatahike) et des bindings Python. La prise en charge de ClojureScript couvre Node.js (backend fichier) et les navigateurs (IndexedDB avec TieredStore). Des exemples de projets incluent Beleg, un système de facturation et CRM avec interface web et génération de PDF LaTeX. Les utilisateurs en production cités incluent le Service public de l'emploi suédois (JobTech Taxonomy, plus de 40 000 concepts, migré depuis Datomic), Stub (comptabilité pour petites entreprises en Afrique du Sud) et l'Université de Heidelberg pour la recherche interne sur le suivi des émotions. Projets associés : Proximum fournit un index vectoriel HNSW pour la recherche sémantique et le RAG sur le modèle persistant de Datahike ; pg-datahike intègre un adaptateur compatible PostgreSQL (protocole wire, traducteur SQL, catalogues pg_*) afin que les clients PostgreSQL puissent se connecter sans installation de PostgreSQL, avec une intégration bidirectionnelle au niveau des datoms et un aller-retour pg_dump (bêta). Datahike fait partie de l'écosystème replikativ et est composé de bibliothèques réutilisables : konserve (stockage clé-valeur enfichable), kabel (transport WebSocket), hasch (hachage adressable par contenu), incognito (sérialisation extensible), superv.async (supervision core.async), replikativ (synchronisation CRDT) et distributed-scope (invocation distante). Les décisions de feuille de route sont pilotées par la communauté via les votes d'idées dans GitHub Discussions. Un support commercial est proposé. Sous licence Eclipse Public License.