Maison >Périphériques technologiques >Industrie informatique >Comparaison de sérialisation des données: JSON, YAML, BSON, MessagePack

Comparaison de sérialisation des données: JSON, YAML, BSON, MessagePack

William Shakespeare
William Shakespeareoriginal
2025-02-18 12:57:09920parcourir

Data Serialization Comparison: JSON, YAML, BSON, MessagePack

Data Serialization Comparison: 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.

points clés

  • JSON (notation d'objet JavaScript) est le format le plus largement utilisé pour la sérialisation des données, fournissant du code lisible par l'homme, des spécifications simples et un support étendu. Cependant, il a également certaines limites, en particulier lors du codage des données binaires.
  • BSON (Binary JSON) est une sérialisation de code binaire des documents de classe JSON. Il fournit un stockage d'informations binaires pratique, est conçu pour les opérations de mémoire rapide et est la principale représentation des données de MongoDB. Cependant, lors de la sérialisation, il peut être plus cher que JSON.
  • MessagePack est un format binaire de sérialisation conçu pour permettre une transmission de réseau efficace. Il surpasse généralement BSON en termes de vitesse et de taille et offre une meilleure compatibilité JSON.
  • YAML (YAML n'est pas un langage de balisage) est un format de texte brut pour la sérialisation qui fournit du code lisible par l'homme et du code compact. Il est particulièrement adapté à la visualisation et à la modification des structures de données. Cependant, sa spécification est beaucoup plus grande que les spécifications de JSON et donc plus complexes.

Qu'est-ce que la sérialisation des données

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.

Format

JSON

Data Serialization Comparison: JSON, YAML, BSON, MessagePack

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:

  • (la plupart) Code lisible par l'homme: Même si le code a été floue ou rétréci, vous pouvez toujours le mettre en place et le rendre lisible à nouveau à l'aide d'outils comme Jsonlint.
  • Spécification très simple et directe: le résumé de l'ensemble des spécifications peut être placé sur une page (comme indiqué sur le site Web de JSON).
  • Support large: non seulement chaque langage de programmation ou IDE est livré avec le support JSON, mais de nombreuses API de service Web fournissent également JSON comme moyen d'échanger des données.
  • En tant que sous-ensemble de JavaScript, il prend en charge les types de données JavaScript suivants:
    • String
    • numéro
    • objet
    • Array
    • true et false
    • null

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

Data Serialization Comparison: JSON, YAML, BSON, MessagePack

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:

  • Stockage d'informations binaires pratique: plus adapté à l'échange d'images et d'accessoires
  • visez à effectuer des opérations de mémoire rapide
  • Spécification simple: comme JSON, BSON a également une spécification très courte et simple
  • La principale représentation des données de MongoDB: BSON est conçue pour être facile à traverser
  • Types de données supplémentaires:
    • Double précision (Numéro de point flottant IEEE 754 64 bits)
    • Date (millisecondes depuis l'ère Unix)
    • tableau d'octets (données binaires)
    • objets BSON et tableaux BSON
    • Code javascript
    • Données binaires MD5
    • Expression régulière

MessagePack

Data Serialization Comparison: JSON, YAML, BSON, MessagePack

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:

  • viser à réaliser une transmission de réseau efficace
  • meilleure compatibilité JSON que BSON: comme l'explique Sadayuki Furuhashi dans ce poste de débordement de pile
  • plus petit que BSON: il a une surcharge plus petite que BSON et peut sérialiser les objets plus petits dans la plupart des cas
  • Vérification des types: il prend en charge le typage statique
  • API Stream: prend en charge le désérialiseur de flux, ce qui est très utile pour la communication réseau.

yaml

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:

  • (vraiment) Code lisible par l'homme: YAML est si lisible que même son contenu de page d'accueil est affiché dans YAML pour illustrer ce point
  • Code complet: Utilisez l'indentation de l'espace pour représenter les structures sans guillemets ni crochets
  • Syntaxe des données relationnelles: Autoriser les références internes à l'aide d'ancres (&) et d'alias (*)
  • particulièrement adapté à la visualisation / modification des structures de données: telles que les fichiers de configuration, les vidages pendant le débogage et les titres de documents
  • Un riche ensemble de types indépendants du langage:
    • Collection:
      • Ensemble de clés non ordonné (!! map)
      • Séquence de touches ordonnées (!! omap)
      • Séquence de touches ordonnées (!! paires)
      • Ensemble non ordonné de valeurs inégales (!! set)
      • Séquence de toute valeur (!! SEQ)
    • Type scalaire:
      • valeur nul (~, null)
      • décimal (1234), hexadécimal (0x4d2) et octal (02333) entiers
      • Correction (1_230.15) et index (12.3015E 02) Numéro de point flottant
      • Infinity (.inf, -.inf) et non numeric (.nan)
      • true (y, vrai, oui, on) et false (n, false, non, off)
      • codé binaire à l'aide de la base64 (!! binaire)
      • horodatage (!! horodat).

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>

Autres formats

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.

… HDF5?

Data Serialization Comparison: JSON, YAML, BSON, MessagePack

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.

Benchmarks et comparaisons

Un modèle qui apparaît est que BSON peut être plus cher lorsqu'il est sérialisé que JSON, mais plus rapide lorsqu'il est désérialisé; et MessagePack est plus rapide que les deux dans n'importe quelle opération. En outre, les fichiers BSON peuvent parfois être plus grands que les fichiers JSON lors du stockage de données non binaires en raison de leurs frais généraux, bien qu'ils soient en format binaire. Quelques liens pour se référer à:

  • Comparaison des performances de sérialisation de Maxim Novak sur m @ x sur dev (c # /. Net).
  • Tampons de protocole, Avro, Thrift et MessagePack publiés par Ilya Grigorik sur ivita.com.
  • Guide de la sérialisation binaire de Karlin Fox sur l'objet atomique.
  • Stockage gratuit Pandas DataFrame Écrit par Matthew Rocklin.
  • Comparaison de MessagePack contre JSON contre BSON par Wesley Tanaka.

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.

Notes et commentaires

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?

Les questions fréquemment posées sur la sérialisation des données et les alternatives JSON

Quelles sont les principales différences entre JSON et YAML?

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.

Comment BSON se compare-t-il à JSON et YAML?

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.

Qu'est-ce que MessagePack et comment se compare-t-il aux autres formats de sérialisation des données?

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.

Quelles sont les autres alternatives à JSON?

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.

Quel format de sérialisation des données dois-je utiliser?

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.

Puis-je utiliser plusieurs formats de sérialisation de données dans la même application?

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.

Comment convertir les données entre différents formats de sérialisation?

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.

Quels impacts de performances seront causés en utilisant différents formats de sérialisation de données?

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.

Quelles sont les précautions de sécurité lors de l'utilisation du format de sérialisation des données?

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.

Comment en savoir plus sur les formats de sérialisation des données?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn