- Se reescribieron las funciones JSON existentes de SQLite. Dependiendo del patrón de uso, pueden ejecutarse varias veces más rápido
- Las funciones JSON originales operaban en 3 etapas
- Parsear el JSON a un formato binario interno que el código en C pueda procesar fácilmente
- Realizar la operación solicitada, como buscar un campo específico o modificar el JSON
- Si la operación modificó el JSON, convertir el formato binario interno a una cadena JSON RFC-8279 para su salida o almacenamiento
- Fuera de la etapa 2, las etapas 1 y 3 son sobrecarga
- SQLite usaba una forma binaria interna de JSON que incluye muchos punteros. Encaja bien con programas en C, pero es difícil de serializar
- Mediante la reescritura de JSONB, esta representación binaria interna del JSON se cambió a un arreglo continuo de bytes que puede leerse o escribirse como un SQL BLOB
- Esto permite almacenar en la base de datos la representación interna del JSON que usa SQLite, en lugar de texto JSON, eliminando así la sobrecarga de las etapas 1 y 3
Qué cambió
- Toda la funcionalidad existente se mantiene igual. Solo se agregaron nuevas funciones
- Ahora, todas las funciones JSON que aceptan texto JSON como entrada también aceptan contenido binario JSONB con los mismos parámetros
- No hace falta indicarle a la función si recibirá texto o datos binarios. La función lo determina por sí sola
- Ahora, las funciones JSON que generan salida se ofrecen en dos versiones
- Las funciones existentes
json_ siguen funcionando igual que antes
- Existen funciones
jsonb_ que devuelven JSONB en lugar de JSON de texto, por lo que en el procesamiento normal se omite la etapa 3
- Si no cambias la aplicación, la velocidad mejora un poco (1%), pero todo seguirá funcionando exactamente igual que antes
- Sin embargo, si modificas la aplicación para empezar a almacenar JSONB en lugar de texto JSON, podrías ver una mejora de rendimiento de al menos 3 veces en tareas intensivas en JSON
- Además, JSONB suele ser un poco más pequeño que el texto JSON en la mayoría de los casos (alrededor de 5% a 10% menos), así que si usas mucho JSON, también podrías notar una ligera reducción en el tamaño de la base de datos
1 comentarios
Comentarios en Hacker News
Hay mucha confusión sobre JSONB
jsonb_.JSONB es un formato que ofrece Postgres, y se recomienda porque mejora el rendimiento de lectura frente al JSON normal.
Tomó varios años entender el propósito de los document stores, y son excelentes para construir POC (Proof of Concept).
Curiosidad sobre el proceso de lanzamientos de SQLite.
Se puede probar JSONB en snapshots de pre-lanzamiento o en el playground.
La idea central de la especificación JSONB es que cada elemento empieza con un encabezado que incluye tamaño y tipo.
Estoy familiarizado con BSON de MongoDB, pero no con JSONB.
JSONB sí afecta el rendimiento.
Ojalá hubiera una forma de comprimir datos JSON entre varias filas.
A pesar del formato interno, se puede usar de inmediato desde la aplicación.
json_eachpuede aceptar parámetros enlazados desde la aplicación como blobs JSONB.