Mirajv1.0
FR

1. Introduction

1.1 Qu'est-ce que MIRAJ#

MIRAJ est un moteur de base de données SQL relationnel en colonnes, en mémoire et durable, développé par CIRTASOFT (https://cirtasoft.com/mirajdb). Il stocke les données de chaque table colonne par colonne, garde ces colonnes en mémoire pour l'exécution des requêtes, et assure la durabilité des écritures par un journal d'écriture rejoué au redémarrage.

MIRAJ s'adresse :

  • aux développeurs qui veulent embarquer un moteur SQL rapide dans une application (bureau, service, outil de traitement de données) sans dépendre d'un serveur externe ;
  • aux développeurs qui construisent des applications client/serveur classiques et veulent un serveur SQL accessible par le réseau, compatible avec les outils et connecteurs existants ;
  • aux administrateurs de bases de données (DBA) qui exploitent un ou plusieurs serveurs MIRAJ : création de comptes, gestion des privilèges, surveillance, sauvegardes, réplication.

Cas d'usage typiques : applications métier avec une base locale embarquée, serveur de données pour une application client/serveur ou web, calculs analytiques sur des volumes tenant en mémoire, consolidation de plusieurs bases derrière un même serveur, déploiement en grappe pour la disponibilité en lecture.

Ce manuel s'adresse aux utilisateurs finaux de MIRAJ (développeurs et DBA) : il décrit le langage SQL, les outils fournis (miraj-cli, miraj-server) et leur administration. Il ne décrit pas l'implémentation interne du moteur.

1.2 Les trois façons d'utiliser MIRAJ#

ModeDescriptionPour qui
EmbarquéLe moteur tourne dans le processus de l'application, par l'API Rust native ou par la bibliothèque dynamique miraj.dll (API C) et son unité Delphi Miraj.pas. Aucun processus séparé, aucune connexion réseau.Applications qui embarquent leurs propres données, sans serveur à déployer.
Ligne de commandeLa console SQL interactive miraj-cli ouvre un dossier de données et exécute des instructions SQL, en mode interactif (REPL) ou en exécutant un fichier .sql.Administration, scripts, exploration ponctuelle des données.
Serveur réseaumiraj-server écoute sur un port TCP (7007 par défaut) et sert des sessions SQL à des clients distants, avec le protocole client/serveur SQL standard du marché : les connecteurs, outils d'administration et clients existants s'y connectent sans adaptation.Applications client/serveur, applications web, accès concurrent de plusieurs applications à une même base.

Ces trois modes partagent le même moteur et le même format de fichier de données : une base ouverte en embarqué peut être servie plus tard par miraj-server, et inversement.

1.3 Les éditions du produit#

MIRAJ est distribué en trois éditions, produites à partir du même code :

ÉditionParallélismePrixCas d'usage
ExpressChaque requête s'exécute sur un seul fil, sans parallélisme intra-requête ; 20 Go de données au plus (erreur 9005 au-delà pour les écritures qui font grossir les données).GratuiteApplications légères, développement, tests, petites charges.
EntrepriseLes requêtes volumineuses (filtres, projections, agrégation, tri, DISTINCT, certaines jointures, lecture des écritures en masse) sont réparties sur plusieurs cœurs.PayanteCharges de travail où la vitesse d'exécution des grosses requêtes compte.
ClusterEntreprise, avec en plus la réplication multi-nœuds : un nœud primaire accepte les écritures, des nœuds secondaires reçoivent son journal et le rejouent en continu, en lecture seule.PayanteDisponibilité en lecture, répartition de charge en lecture, préparation à un déploiement distribué.

Les trois éditions parlent le même SQL et lisent les mêmes fichiers de données ; seules la répartition du travail entre cœurs, le plafond de données de l'édition Express et la réplication changent.

Savoir quelle édition on utilise#

SELECT @@miraj_edition;
-- 'Entreprise', 'Express' ou 'Cluster'

SELECT @@version_comment;

SHOW ENGINES;

VERSION() rend le même numéro de version quelle que soit l'édition ; c'est @@miraj_edition, @@version_comment et SHOW ENGINES qui distinguent Entreprise, Express et Cluster.

1.4 Aperçu de l'architecture#

Vu depuis l'extérieur, un moteur MIRAJ repose sur quatre principes :

  • Stockage en colonnes, en mémoire. Chaque colonne d'une table est rangée séparément, avec un indicateur de valeur absente (NULL) par colonne et une compression par dictionnaire ; les données travaillées par les requêtes résident en mémoire, le disque servant de support de durabilité.
  • Journal d'écriture pour la durabilité. Toute écriture passe par un journal avant d'être considérée acquise ; des points de sauvegarde périodiques limitent le travail à rejouer après un arrêt brutal, qu'il s'agisse d'un arrêt du processus, d'une coupure de courant ou d'un arrêt du système.
  • Exécution vectorisée. Les requêtes ne traitent pas les lignes une par une : elles opèrent par lots de plusieurs milliers de lignes à la fois, ce qui réduit le travail répété par ligne et tire parti du matériel moderne.
  • Transactions. Chaque session peut travailler en transaction (START TRANSACTION, COMMIT, ROLLBACK), avec un isolement sérialisable qui ne bloque jamais un lecteur en attente d'un écrivain.

Ce manuel reste à ce niveau : il ne détaille pas l'organisation interne du moteur (les couches internes, les formats binaires) au-delà de ce qui est utile pour l'exploiter, le configurer et l'administrer. Les lecteurs intéressés par l'implémentation trouveront cette information dans la documentation technique du projet, distincte de ce manuel.

1.5 Sommaire du manuel#

  1. Introduction — ce document
  2. Installation — installer et démarrer MIRAJ, miraj-server et miraj-cli, compiler depuis les sources
  3. Prise en main — premier pas à pas : serveur, connexion, table, données, requêtes
  4. Types de données — les types SQL pris en charge
  5. Langage DDL — bases, tables, vues, index, contraintes
  6. Langage DML — INSERT, UPDATE, DELETE
  7. Requêtes SELECT — jointures, agrégation, tri, sous-requêtes
  8. Fonctions SQL — fonctions de chaînes, nombres, dates, contrôle
  9. Transactions et concurrence — isolation, verrous, MVCC
  10. Comptes et privilèges — utilisateurs, rôles, GRANT/REVOKE
  11. Administration du serveur — configuration, sécurité, supervision, sauvegardes
  12. Cluster et réplication — édition Cluster, primaire et secondaires
  13. miraj-cli — référence de la console SQL
  14. Bibliothèques clientes — API embarquée et enveloppes miraj.dll
  15. Codes d'erreur — référence des codes et messages
  16. Limites connues — ce que MIRAJ ne fait pas encore
  17. miraj-migrate — migration d'une base SQL existante vers MIRAJ
  18. Sauvegarde et restauration — BACKUP / RESTORE à chaud, miraj-backup, export SQL miraj-dump
  19. Recherche vectorielle — VECTOR INDEX (HNSW), k plus proches voisins, mhnsw_ef_search, USING hnsw