Maison >Périphériques technologiques >Industrie informatique >Comparaison de sérialisation des données: JSON, YAML, BSON, MessagePack
La norme réelle pour l'échange de données réseau est JSON (notation d'objet JavaScript), mais elle a également des inconvénients et, dans certains cas, d'autres formats peuvent être plus applicables. Cet article comparera les avantages et les inconvénients de diverses alternatives, y compris la facilité d'utilisation et les performances.
Remarque: Cet article ne présentera pas les détails de l'implémentation en détail, mais si vous êtes un programmeur Ruby, veuillez consulter cet article écrit par Dhaivat, qui introduit des moyens d'implémenter certains formats de sérialisation dans Ruby.
Selon la définition de Wikipedia, la sérialisation est:
Le processus de conversion des structures de données ou des états d'objets en formats qui peuvent être stockés (par exemple, stockés dans un fichier ou un tampon de mémoire, ou transmis sur un lien de connexion réseau) et reconstruit ultérieurement dans le même environnement informatique ou autre.
Supposons que vous souhaitiez collecter certaines données sur un groupe de personnes - nom, nom de famille, surnom, date de naissance, instruments qu'ils jouent. Vous pouvez facilement configurer une feuille de calcul, définir certaines colonnes et placer chaque ligne comme entrée. Vous pouvez aller plus loin, la date de définition de la colonne de naissance doit être un nombre et la colonne d'instrument peut être une liste d'options. Cela ressemble à ceci:
nom Nom court Date de naissance surnom instrument de musique William Bailey 1962 Axl Rose Vocals, Piano Saul Hudson 1965 Slash Guitar
Plus ou moins, ce que vous faites, il y a une structure de données; si vous avez seulement besoin du format de feuille de calcul, vous le ferez bien. Le problème est que si vous souhaitez échanger ces informations avec une base de données ou un site Web, les mécanismes de mise en œuvre de ces structures de données sur ces autres plateformes seront très différents même si la sémantique sous-jacente est généralement la même. Vous ne pouvez pas simplement insérer une feuille de calcul dans une application Web à moins que l'application ne soit conçue spécifiquement pour cela. À moins que vous ayez une sorte d'outil d'exportation ou de passerelle, vous ne pouvez pas transférer des informations du site Web vers la base de données.
Supposons que notre site Web implémente déjà ces structures de données dans sa logique interne et qu'elle ne peut tout simplement pas gérer les formats de feuille de calcul. Pour résoudre ces problèmes, vous pouvez convertir ces structures de données en un format facile à partager entre différentes applications, architectures ou autres contenus: vous les sérialisez. Ce faisant, vous pouvez vous assurer que non seulement ces données peuvent être transférées sur toutes les plateformes, mais elles peuvent être reconstruites dans un processus inverse appelé désérialisation. De plus, si vous échangez à une feuille de calcul du site Web, vous obtenez sémantiquement le même clone de l'objet d'origine - c'est-à-dire les lignes qui ressemblent exactement à celles que vous avez envoyées à l'origine.
En bref: les données de sérialisation consiste à trouver un format commun qui est facile à partager entre les différentes applications.
JSON (notation d'objet JavaScript) est un format d'échange de données léger. Il est facile à lire et à écrire par les humains; il est facile de analyser et de générer des machines.
JSON est le format de sérialisation des données le plus utilisé, et il a les caractéristiques suivantes:
Ce qui suit est à quoi ressemble notre feuille de calcul précédente après la sérialisation dans JSON:
<code>[ { "name": "William", "last name": "Bailey", "dob": 1962, "nickname": "Axl Rose", "instruments": [ "vocals", "piano" ] }, { "name": "Saul", "last name": "Hudson", "dob": 1965, "nickname": "Slash", "instruments": [ "guitar" ] } ] </code>
BSON, c'est-à-dire JSON binaire, est une sérialisation de code binaire des documents de classe JSON ... il contient également des extensions qui permettent des représentations de types de données qui n'appartiennent pas à la spécification JSON.
JSON est un format de texte brut. BSON est utilisé pour faire face à ces problèmes.
Il a les caractéristiques suivantes:
C'est similaire à JSON. Mais plus rapide et plus petit.
MessagePack (également connu sous le nom de MSGPACK) est un autre format binaire pour la sérialisation. Pas aussi célèbre que BSON, mais mérite un coup d'œil.
Ses caractéristiques incluent:
YAML: YAML n'est pas une langue de balisage. Ce que c'est: YAML est une norme de sérialisation de données humanisée pour tous les langages de programmation.
Retour au format de texte brut, Yaml est une alternative à JSON:
Ce qui suit est à quoi ressemble notre feuille de calcul après la sérialisation dans YAML:
<code>[ { "name": "William", "last name": "Bailey", "dob": 1962, "nickname": "Axl Rose", "instruments": [ "vocals", "piano" ] }, { "name": "Saul", "last name": "Hudson", "dob": 1965, "nickname": "Slash", "instruments": [ "guitar" ] } ] </code>
Il existe de nombreux autres formats de sérialisation, tels que les tampons de protocole (Protobuf, également au format binaire), que j'ai omis (d'une manière plutôt aléatoire). Si vous voulez ne connaître que tous les formats possibles, consultez Wikipedia sur les comparaisons de format de sérialisation des données.
Nous allons dévier un peu du sujet ici. Le format de données en couches version 5 (HDF5) n'est pas vraiment pour la sérialisation, mais pour le stockage, et il balaie la science des données et d'autres industries. Il s'agit d'un format très rapide et universel qui peut être utilisé non seulement pour stocker de nombreuses structures de données, mais aussi en remplacement des bases de données relationnelles.
Pour terminer cet épisode, mentionnons simplement que si vous utilisez des formats binaires comme BSON et MessagePack pour stocker / échanger beaucoup d'informations, vous pourriez être tenté de consulter HDF5.
Il convient également de noter que même pour le même format, les performances peuvent dépendre du sérialiseur et de l'analyseur que vous choisissez.
Bien que cela semble idiot, BSON a l'avantage du nom: les gens associeront automatiquement les formats développés par MongoDB (BSON) à Standard (JSON), et il n'y a aucun lien entre eux. Par conséquent, vous pouvez également considérer d'autres options lors de la recherche d'alternatives binaires à JSON.
En fait, MessagePack semble surpasser BSON dans tous les sens: il est plus rapide et plus petit, et il est encore plus compatible JSON que BSON. (En fait, si vous utilisez déjà JSON, MessagePack est presque une optimisation plug-and-play.) Peut-être qu'en tant que "journaliste", je devrais être un peu plus équilibré, mais en tant que développeur, cela ne fait aucun doute.
Néanmoins, BSON est le format utilisé par MongoDB pour stocker et représenter les données, donc si vous utilisez cette base de données NoSQL, il y a une raison de vous y tenir.
Bien sûr, la sérialisation ne consiste pas seulement à stocker des données binaires. Certes, JSON a un objectif différent - c'est-à-dire «lisible humain». Cependant, un peu d'attention révèlera que Yaml va mieux à cet égard.
Cependant, la spécification YAML est très grande, en particulier par rapport à la spécification JSON. Mais il faut dire que car il contient plus de types de données et de fonctionnalités.
En revanche, on ne peut ignorer que la simplicité de JSON est la clé de son adoption en tant qu'autres formats de sérialisation. Il s'appuie sur un langage largement utilisé qui existe déjà, JavaScript, et si vous savez ou avez été exposé à JS (si vous êtes dans l'industrie du développement Web, vous connaissez JSON).
Alors pourquoi ne pas utiliser Yaml maintenant? Dans de nombreux cas, ce n'est pas facile. JSON a toujours une place dans l'API Web car vous pouvez facilement intégrer le code JSON dans les demandes HTTP (pour les objets, comme dans les URL et les publications, comme dans les formulaires d'envoi): ce format vous fera savoir si le transfert est soudainement interrompu , car le code rendra automatiquement invalide, ce qui peut ne pas être le cas avec YAML et d'autres formats de texte brut concurrents. De plus, vous devez toujours interagir avec l'API basé sur JSON et le code hérité à un moment donné, et le maintien de deux extraits de code (méthodes JSON et YAML) dans le même but (sérialisation des données) est toujours une chose douloureuse.
Mais là encore, ces parties sont les mêmes que l'argument qui nous repousse et nous empêche d'adopter des technologies plus récentes et plus efficaces (par exemple Python 3 au lieu de Python 2). J'ai pensé une fois une minute que nous, les programmeurs et les entrepreneurs, sommes des innovateurs, n'est-ce pas?
JSON et YAML sont tous deux des formats de sérialisation des données, mais ils ont des différences clés. JSON est un sous-ensemble de JavaScript et est souvent utilisé dans les applications Web en raison de sa compatibilité avec JavaScript. Il utilise une syntaxe simple et est facile à lire et à écrire. Cependant, il manque certaines fonctionnalités telles que des commentaires et des chaînes multi-lignes. Yaml, en revanche, est un superset de JSON et a une syntaxe plus humanisée. Il prend en charge les commentaires et les chaînes multi-lignes, ce qui le rend plus facile à utiliser comme fichier de configuration. Cependant, il est plus complexe que JSON et n'est pas aussi largement pris en charge que JSON.
BSON ou Binary JSON est une représentation binaire d'un document de classe JSON. Il est conçu pour être efficace dans l'espace, et il est également vrai dans les scénarios à forte intensité de calcul tels que la transmission du réseau. BSON peut stocker plus de types de données que JSON, y compris les types de données binaires et de date. Cependant, il n'est pas aussi lisible que JSON ou YAML et est principalement utilisé pour stocker et récupérer des données dans MongoDB.
MessagePack est un format de sérialisation binaire de type JSON mais plus efficace. Il est compact, rapide et prend en charge une variété de types de données. Il est souvent utilisé dans les applications qui nécessitent des performances élevées, telles que les applications de streaming en temps réel. Cependant, comme BSON, il n'est pas aussi lisible que JSON ou YAML.
Oui, il existe plusieurs autres alternatives à JSON, notamment XML, Protobuf et Avro. XML est un langage de balisage lisible par l'homme qui prend en charge des structures de données complexes, mais elle est plus verbeuse que JSON. Protobuf ou tampons de protocole est un format de sérialisation binaire développé par Google, qui est compact et rapide, mais pas lisible. Avro est un format de sérialisation binaire développé par Apache qui prend en charge l'évolution des modèles pour le rendre adapté au stockage à long terme des données.
La sélection du format de sérialisation des données dépend de vos besoins spécifiques. Si vous avez besoin d'un format lisible par l'homme et facile à utiliser, alors JSON ou YAML peut être le meilleur choix. Si vous avez besoin d'un format compact et rapide, MessagePack ou BSON peut être plus approprié. Si vous avez besoin d'un format qui prend en charge l'évolution des modèles, Avro est probablement le meilleur choix. Avant de prendre une décision, il est important de comprendre les avantages et les inconvénients de chaque format.
Oui, plusieurs formats de sérialisation de données peuvent être utilisés dans la même application. Par exemple, vous pouvez utiliser JSON pour échanger des données entre le client et le serveur et utiliser BSON pour stocker des données dans MongoDB. Cependant, l'utilisation de plusieurs formats peut augmenter la complexité de votre application, alors assurez-vous de peser attentivement les avantages et les inconvénients.
Il existe plusieurs bibliothèques et outils qui peuvent être utilisés pour convertir les données entre différents formats de sérialisation. Par exemple, vous pouvez utiliser le module JSON dans Python pour convertir les données entre les objets JSON et Python, ou utiliser le module YAML pour convertir les données entre les objets YAML et Python. Il existe également des outils en ligne, tels que JSON2YAML, qui peuvent être utilisés pour convertir les données entre JSON et YAML.
L'impact des performances de l'utilisation de différents formats de sérialisation de données peut varier selon le cas d'utilisation. Les formats binaires comme BSON et MessagePack sont souvent plus rapides et plus compacts que les formats textuels comme JSON et YAML. Cependant, ils sont moins lisibles que les humains, ce qui peut rendre le débogage plus difficile. Les performances des bibliothèques et des outils utilisées pour sérialiser et désérialiser les données doivent également être prises en compte.
Oui, il existe des précautions de sécurité lors de l'utilisation du format de sérialisation des données. Par exemple, si certains formats tels que JSON et YAML ne sont pas nettoyés correctement, ils peuvent exécuter du code arbitraire, ce qui peut conduire à des vulnérabilités de sécurité. Assurez-vous d'utiliser des bibliothèques et des outils de confiance pour sérialiser et désérialiser les données et nettoyer toutes les données fournies par l'utilisateur.
Il existe de nombreuses ressources en ligne pour vous aider à en savoir plus sur les formats de sérialisation des données. Vous pouvez commencer par lire des documents officiels dans chaque format, qui contiennent généralement des tutoriels et des exemples. Il existe également de nombreux tutoriels et articles sur des sites comme Stack Overflow et Medium. Enfin, vous pouvez essayer différents formats dans votre propre projet pour acquérir une expérience pratique.
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!