- Format de sérialisation binaire zero-copy développé pour effacer la frontière entre l’analyse des données et la sérialisation
- Les données sont encodées dans une structure en B-arbre au sein d’un unique buffer contigu, ce qui permet l’accès et la modification de champs arbitraires en temps
O(log n)
- Le format mémoire est aussi le format de transmission, permettant un envoi et une réception immédiats sans étape distincte d’analyse ni de re-sérialisation
- Dès la réception, la recherche de clés, la modification de valeurs et la transmission peuvent être entièrement traitées par simple copie mémoire (
memcpy)
- Structure sans schéma (auto-descriptive), utilisable sans IDL ni définition de schéma
- Prise en charge de la conversion bidirectionnelle avec JSON, assurant la compatibilité avec les API et jeux de données existants
- Possibilité d’affichage au format JSON pour le débogage et l’inspection des messages
- Conception axée sur les performances
- Repose sur une structure en B-arbre favorable au cache et sur une implémentation C minimale de 9,3 kB
- Jusqu’à 120 fois plus rapide que les bibliothèques JSON les plus rapides utilisant le SIMD, et jusqu’à 242 fois plus rapide que Google Flatbuffers
- Fait partie des formats de données sans schéma les plus rapides au monde
- Caractéristiques techniques
- Prise en charge de la lecture/écriture zero-copy, avec toutes les opérations d’E/S en complexité
O(log n)
- Validation des pointeurs et sûreté de type à l’exécution intégrées
- N’utilise pas
malloc(), le buffer étant fourni directement par l’appelant
- Latence prévisible et faible empreinte mémoire
- Basé sur C11 (syntaxe GNU C), sans dépendance externe
- Utilise éventuellement yyjson comme sous-dépendance pour prendre en charge la conversion JSON
- Composition de l’API
- Buffer API : basée sur un buffer fourni par l’utilisateur, pour un contrôle mémoire maximal
- Context API : abstraction de la gestion mémoire, offrant une interface simple
- Comparaisons et résultats de benchmarks
- Vitesse de traitement écrasante face aux formats texte comme JSON, BSON ou MessagePack
- Offre davantage de flexibilité et de capacité de modification que des formats binaires comme Cap’n Proto et Flatbuffers
- Enregistre des performances de tout premier plan sur des données réelles de l’API Twitter, Kostya JSON et des benchmarks de sérialisation C++
- Conception de la sécurité
- Comprend des vérifications de bornes contre les débordements, des macros de pointeurs générationnels, des limites de récursion et une vérification de type à l’exécution
- Structure adaptée au traitement de données d’entrée non fiables
- Contextes d’utilisation
- Maximise l’efficacité CPU dans des cas comme la messagerie réseau haute performance, le traitement de données en temps réel et les environnements embarqués
- Applicable immédiatement dans les systèmes basés sur une interface C
- Licence et extensibilité
- Publié sous licence MIT, avec une implémentation C autonome
- Une feuille de route prévoit notamment des bindings pour d’autres langages, des benchmarks de compression et la rédaction d’une spécification officielle
- Origine et contexte
- Projet réimplémenté de manière indépendante à partir du concept proposé dans l’article Lite² publié en 2024
- Le nom Lite³ signifie qu’il est encore plus léger que Lite²
Aucun commentaire pour le moment.