Salut Dev !
Je m'appelle Alex, un passionné de technologie. Je suis ravi de vous montrer Jinbase, ma base de données transactionnelle embarquée multimodèle.
Il y a presque un an, j'ai présenté Paradict, ma vision de la sérialisation du streaming multiformat. Compte tenu de sa lisibilité, le format texte Paradict apparaît de facto comme un format de données intéressant pour les fichiers de configuration. Mais utiliser Paradict pour gérer les fichiers de configuration finirait par encombrer son interface de programmation et la rendre déroutante pour les utilisateurs qui ont encore le choix de bibliothèques alternatives (TOML, INI File, etc.) dédiées aux fichiers de configuration. J'ai donc utilisé Paradict comme dépendance pour KvF (Key-value file format), un de mes nouveaux projets qui se concentre sur les fichiers de configuration avec des sections.
Avec son format binaire compact, j'ai pensé que Paradict serait une dépendance efficace pour un nouveau projet qui s'appuierait sur des fonctions d'E/S (telles que Ouvrir, Lire, Écrire, Rechercher, Tell et Fermer) pour implémenter un système minimaliste mais fiable. solution de persistance. Mais c'était avant que j'apprenne que "les fichiers sont durs". SQLite avec ses transactions, son type de données BLOB et ses E/S incrémentielles pour les BLOB semblait être le géant idéal pour mon nouveau projet.
Jinbase a commencé petit en tant que magasin de valeurs-clés et a fini par devenir une base de données intégrée multimodèle qui repousse les limites de ce que nous faisons habituellement avec SQLite. La première transition vers le deuxième modèle de données (le dépôt) s'est produite lorsque j'ai réalisé que le magasin clé-valeur n'était pas bien adapté aux cas où un identifiant unique (UID) est censé être généré automatiquement pour chaque nouvel enregistrement, économisant ainsi à l'utilisateur le charge de fournir un identifiant qui pourrait accidentellement faire l'objet d'une collision et ainsi écraser un enregistrement existant. Après cela, j'ai implémenté une fonctionnalité de recherche qui accepte les plages d'UID pour le magasin de dépôt, les périodes (les enregistrements sont automatiquement horodatés) pour le dépôt et les magasins de valeurs-clés, ainsi que les modèles GLOB et les plages de nombres pour les clés de chaîne et entières dans le magasin de valeurs-clés. .
Les modèles de données de file d'attente et de pile sont apparus comme des solutions pour les cas d'utilisation où les enregistrements doivent être consommés dans un ordre spécifique. Un enregistrement typique serait récupéré et supprimé de la base de données en une seule unité de transaction.
Étant donné que SQLite est utilisé comme moteur de stockage, Jinbase prend en charge de facto le modèle relationnel. Pour plus de commodité, toutes les tables liées aux éléments internes de Jinbase portent le préfixe jinbase_, ce qui fait de Jinbase un outil utile pour ouvrir des fichiers SQLite existants afin d'ajouter de nouveaux modèles de données qui coexisteront en toute sécurité avec le modèle relationnel ad hoc.
Les quatre principaux modèles de données (valeur-clé, dépôt, file d'attente, pile) prennent en charge les types de données compatibles Paradict, tels que les dictionnaires, les chaînes, les données binaires, les entiers, les booléens, les dates et heures, etc. Sous le capot, lorsque l'utilisateur lance une opération d'écriture, Jinbase sérialise (sauf pour les données binaires), fragmente et stocke les données de manière itérative. Un enregistrement est accessible non seulement en masse, mais également avec deux niveaux de granularité d'accès partiel : le niveau octet et le niveau champ.
Alors que les E/S incrémentielles de SQLite pour les BLOB sont conçues pour cibler une colonne BLOB individuelle dans une rangée, Jinbase l'étend de sorte que pour chaque enregistrement, les lectures incrémentielles couvrent tous les morceaux comme s'il s'agissait d'un seul BLOB unifié. Pour les enregistrements du dictionnaire uniquement, Jinbase crée et maintient automatiquement un index léger composé de pointeurs vers des champs racine, qui permet ensuite d'extraire d'un enregistrement arbitraire le contenu d'un champ automatiquement désérialisé avant d'être renvoyé.
Les cas d'utilisation les plus évidents de Jinbase sont le stockage des préférences utilisateur, la persistance des données de session avant la sortie, le traitement des flux de données basé sur l'ordre, l'exposition des données pour d'autres processus, la mise à niveau des anciens fichiers SQLite avec de nouveaux modèles de données et des solutions de persistance des données sur mesure.
Jinbase est écrit en Python, est disponible sur PyPI et vous pouvez jouer avec les exemples sur le README.
Faites-moi savoir ce que vous pensez de ce projet.
Lien du projet : https://github.com/pyrustic/jinbase
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!