JSON es un formato de intercambio de datos ampliamente utilizado, popular en muchas aplicaciones y pilas de tecnología. BSON, la representación binaria de JSON, es utilizada principalmente internamente por MongoDB para un almacenamiento y recorrido de datos eficientes.
Índice
JSON, o JavaScript Object Notation, es un formato legible por humanos para el intercambio de datos, introducido a principios de la década de 2000. Aunque JSON se basa en un subconjunto del estándar del lenguaje de programación JavaScript , es completamente independiente del lenguaje.
Los objects JSON son contenedores asociativos, en los que una clave de cadena se asigna a un value (que puede ser un número, una cadena, un booleano, una abanico, un valor vacío, nulo o incluso otro objeto). Casi cualquier lenguaje de programación tiene asistencia técnica para esta estructura de datos abstracta: objetos en JavaScript, diccionarios en Python, tablas hash en Java y C#, matrices asociativas en C++, etc.
Los objetos JSON están estructurados en formatos legibles por humanos, que también son fáciles de leer para las aplicaciones.
{
"_id": 1,
"name": { "first" : "John", "last" : "Backus" },
"contribs": [ "Fortran", "ALGOL", "Backus-Naur Form", "FP" ],
"awards": [
{
"award": "W.W. McDowell Award",
"year": 1967,
"by": "IEEE Computer Society"
}, {
"award": "Draper Prize",
"year": 1993,
"by": "National Academy of Engineering"
}
]
}
Observe que el archivo JSON consiste en pares clave-valor separados por comas y que los pares clave y valor se indican con dos puntos (:). El objeto JSON (documento) comienza y termina con llaves. Puede utilizar cualquiera de los tipos de datos admitidos. El ejemplo anterior muestra cadenas (entre comillas dobles), números y matrices (entre corchetes).
A medida que JavaScript se convirtió en el lenguaje líder para el desarrollo web, JSON comenzó a cobrar vida propia. En virtud de ser tanto legible por humanos como por asistencia técnica , y de ser comparativamente simple de implementar en otros lenguajes, JSON fue rápidamente más allá de la página web y al software en todas partes.
Hoy en día, JSON aparece en muchos casos diferentes: - API - Archivos de configuración - Mensajes de registro - Almacenamiento de bases de datos
MongoDB se diseñó desde el comienzo para que sea una base de datos centrada en ofrecer una gran experiencia de desarrollo. La ubicuidad de JSON lo convirtió en la opción obvia para representar estructuras de datos en modelo de datos de documento de MongoDB.
Es más fácil crear aplicaciones utilizando pilas de tecnología como MEAN y MERN, ya que los desarrolladores pueden usar un único lenguaje de programación (JavaScript) de extremo a extremo.
Sin embargo, hay varios problemas que hacen que JSON no sea ideal para su uso dentro de una base de datos.
JSON solo admite un número limitado de tipos de datos básicos. En particular, JSON carece de asistencia técnica para datos de fecha y hora y binarios.
Los objetos y las propiedades JSON no tienen una longitud fija, lo que hace que el recorrido sea más lento.
JSON no proporciona metadatos ni información de tipo, lo que tarda más en recuperar los documentos.
Para hacer MongoDB JSON, primero pero aún de alto rendimiento y de propósito general, se inventó BSON para cerrar la brecha: una representación binaria para almacenar datos como documentos JSON , optimizados para la velocidad, el espacio y la eficiencia. No se diferencia de otros formatos de intercambio binario, como Protocol Buffers o Thrift, en términos de enfoque.
BSON significa “ JSON binario“, y eso es exactamente para lo que se inventó. Un archivo BSON es una representación binaria del archivo JSON correspondiente. El formato de serialización codificado en binario de BSON también codifica la información de tipo y longitud, lo que permite recorrerlo mucho más rápidamente en comparación con JSON.
BSON añade algunos tipos de datos adicionales (no nativos de JSON), como fechas y datos binarios, sin los cuales MongoDB no habría recibido una asistencia técnica técnica valiosa .
A continuación, se muestran algunos objetos JSON de ejemplo y sus representaciones binarias JSON correspondientes.
{"hello": "world"} →
\x16\x00\x00\x00 // total document size
\x02 // 0x02 = type String
hello\x00 // field name
\x06\x00\x00\x00world\x00 // field value
\x00 // 0x00 = type EOO ('end of object')
{"BSON": ["awesome", 5.05, 1986]} →
\x31\x00\x00\x00
\x04BSON\x00
\x26\x00\x00\x00
\x02\x30\x00\x08\x00\x00\x00awesome\x00
\x01\x31\x00\x33\x33\x33\x33\x33\x33\x14\x40
\x10\x32\x00\xc2\x07\x00\x00
\x00
\x00
Puede obtener más información sobre la gramática BSON en la Especificación BSON .
MongoDB almacena datos en formato BSON tanto internamente como a través de la red. Cualquier cosa que pueda representar en JSON se puede almacenar de forma nativa en MongoDB y recuperarse con la misma facilidad en JSON.
Al utilizar el controlador MongoDB para su lenguaje de programación favorito, se trabaja con las estructuras de datos nativo de ese lenguaje. Su aplicación necesita convertir la estructura de datos nativo (por ejemplo, un objeto JavaScript o POJO) a JSON. Luego, el controlador MongoDB se encarga de convertir los datos de JSON a BSON y viceversa al consultar la base de datos.
A diferencia de los sistemas que almacenan JSON como valores codificados en cadena o blobs codificados en binario, MongoDB utiliza BSON para ofrecer potentes funciones de indexación y consulta, además del formato de datos más popular de la web.
Por ejemplo, MongoDB permite a los desarrolladores consultar y manipular objetos mediante claves específicas dentro del documento JSON/ BSON , incluso en documentos anidados a muchas capas de profundidad en un registro, y crear índices de alto rendimiento sobre esas mismas claves y valores.
En primer lugar, los archivos BSON pueden contener objetos de fechahora o binarios que no se pueden representar de forma nativa en JSON puro.
En segundo lugar, cada lenguaje de programación tiene su propia semántica de objetos. Los objetos JSON tienen claves ordenadas, por instancia, mientras que los diccionarios de Python (la estructura de datos nativo más cercana que es análoga a los objetos de JavaScript ) son desordenadas, mientras que también pueden entrar en juego las diferencias en los tipos de datos numéricos y de cadena. En tercer lugar, BSON admite una variedad de tipos numéricos que no son nativo de JSON y muchos lenguajes los representan de manera diferente.
o JSON extendido es un JSON- forma compatible de representar valores BSON en MongoDB. Como JSON solo admite un subconjunto de los tipos admitidos por BSON, MongoDB agrega ciertas extensiones al formato JSON , a saber, el modo canónico y el modo relajado. MongoDB proporciona métodos como serializar, deserializar, analizar y stringificar para EJSON.
Cuando una aplicación escribe o actualiza datos en MongoDB utilizando el shell, la API o MongoDB Atlas , el controlador MongoDB analiza los datos en formato BSON . El análisis implica identificar e interpretar los objetos JavaScript o la estructura JSON , asignar cada campo al tipo de datos BSON correcto y convertir los valores. Cuando una aplicación solicita datos de MongoDB, el controlador convierte los datos en una cadena JSON antes de enviarlos a través del servidor.
Consulte la documentación del controlador para asegurarse de que comprende la mejor manera de acceder a los datos respaldados por la BSON de MongoDB en su idioma.
JSON | BSON | |
---|---|---|
Encoding | UTF-8 string | Binary |
Data Support | String, boolean, number, array, object, null | String, boolean, number (integer, float, long, decimal128...), array, null, date, BinData |
Readability | Human and machine | Machine only |
JSON y BSON son, de hecho, primos cercanos por diseño. BSON está diseñado como una representación binaria de datos JSON , con extensiones específicas para aplicaciones más amplias y optimizado para el almacenamiento y el recorrido de datos. Al igual que JSON, BSON admite la incrustación de objetos y matrices.
Una forma particular en la que BSON se diferencia de JSON es en que asistencia técnica algunos tipos de datos más avanzados. JSON no diferencia, por instancia, entre enteros (que son números redondos) y números en coma flotante (que tienen varios grados de precisión decimal).
La mayoría de los lenguajes de programación del lado del servidor tienen tipos numéricos más sofisticados (los estándares incluyen enteros, números de coma flotante de precisión regular, también conocidos como “float” — coma flotante de doble precisión — también conocido como “doble” — y valores booleanos), cada uno con su propio uso óptimo para operaciones matemáticas eficientes.
Uno de los grandes atractivos para los desarrolladores que utilizan bases de datos con modelos de datos JSON y BSON es el esquema dinámico y flexible que proporcionan en comparación con los modelos de datos rígidos y tabulares utilizados por las bases de datos relacionales.
En primer lugar, los documentos de MongoDB son polimórficos — los campos pueden variar de un documento a otro dentro de una sola collection (de manera análoga a las tablas de una base de relational database). Esta flexibilidad facilita el modelado de datos de cualquier estructura y la adaptación del modelo a medida que cambian los requisitos.
En segundo lugar, no es necesario declarar la estructura de los documentos a la base de datos — los documentos se autodescriben. Los desarrolladores pueden empezar a escribir código y conservar los objetos a medida que se crean.
En tercer lugar, si es necesario agregar un nuevo campo a un documento, se puede crear sin afectar a todos los demás documentos de la colección, sin actualizar un catálogo del sistema central y sin desconectar la base de datos. Cuando necesita realizar cambios en el modelo de datos, la base de datos de documentos continúa almacenando los objetos actualizados sin necesidad de realizar costosas operaciones de ALTER TABLE o, lo que es peor, sin tener que rediseñar el esquema desde cero.
Mediante estas ventajas, la flexibilidad del modelo de datos de documento se adapta bien a las demandas de las prácticas modernas de desarrollo de aplicaciones.
Aunque un esquema flexible es una característica potente , hay situaciones en las que es posible que desee tener más control sobre la estructura de datos y el contenido de sus documentos. La mayoría de las bases de datos de documentos devuelven la aplicación de estos controles al desarrollador para que los implemente en el código de la aplicación. Sin embargo, las bases de datos de documentos más avanzadas proporcionan validación de esquema , utilizando enfoques como el estándar de esquema JSON de IETF adoptado por MongoDB. Pruebe MongoDB Atlas en línea ahora
Puede utilizar las herramientas JSON en línea para convertir entre BSON y JSON. MongoDB también proporciona la herramienta bsondump para convertir BSON en JSON.
BSON ofrece las siguientes ventajas sobre JSON:
BSON admite más tipos de datos, como fecha, hora y datos binarios.
La estructura binaria de BSON permite un recorrido y recuperación de datos más rápidos.
BSON proporciona metadatos adicionales, como información sobre la longitud y el tipo, para que las búsquedas sean más rápidas.
BSON es la serialización codificada en binario de datos JSON . Si bien la cadena JSON es legible por humanos, es necesario analizar BSON . BSON ofrece las ventajas adicionales de tener más tipos de datos, ser ligero y transitable, y almacenar datos de forma más eficiente. También es eficiente para codificar y decodificar con muchos lenguajes de programación.
Para obtener más información, consulte los recursos relacionados: