- Reescrita das funções JSON existentes do SQLite. Dependendo do padrão de uso, a execução pode ficar várias vezes mais rápida
- Originalmente, as funções JSON operavam em 3 etapas
- Faziam o parse do JSON para um formato binário interno que o código em C consegue processar facilmente
- Executavam a operação solicitada, como localizar um campo específico ou modificar o JSON
- Se a operação alterasse o JSON, convertiam o formato binário interno em uma string JSON RFC-8279 para saída ou armazenamento
- Tirando a etapa 2, as etapas 1 e 3 são overhead
- O SQLite usava uma forma binária interna de JSON contendo muitos ponteiros. Ela se adapta bem a programas em C, mas é difícil de serializar
- Com a reescrita do JSONB, essa representação binária interna do JSON foi alterada para um array contínuo de bytes que pode ser lido ou gravado como um SQL BLOB
- Com isso, a representação interna do JSON usada pelo sistema pode ser armazenada no banco de dados em vez de JSON em texto, eliminando o overhead das etapas 1 e 3
O que mudou
- Todos os recursos existentes foram mantidos. Apenas novas funcionalidades foram adicionadas
- Agora, todas as funções JSON que aceitam texto JSON como entrada também aceitam conteúdo binário JSONB para os mesmos parâmetros
- Não é necessário informar à função se ela deve receber texto ou dados binários. Ela detecta isso sozinha
- Agora, as funções JSON que produzem JSON são oferecidas em duas versões
- As funções
json_ existentes continuam funcionando como antes
- Há funções
jsonb_ que retornam JSONB em vez de JSON em texto, então a etapa 3 é omitida no processamento geral
- Se você não alterar a aplicação, tudo continuará funcionando como antes, embora com um pequeno ganho de velocidade (1%)
- Porém, se você modificar a aplicação para começar a armazenar JSONB em vez de JSON em texto, poderá ver um ganho de desempenho de pelo menos 3x, ao menos em tarefas intensivas em JSON
- Além disso, o JSONB costuma ser um pouco menor que o JSON em texto na maioria dos casos (cerca de 5% a 10% menor), então, se você usa muito JSON, também poderá notar uma leve redução no tamanho do banco de dados
1 comentários
Comentários do Hacker News
Há muita confusão sobre JSONB
jsonb_.JSONB é um formato oferecido pelo Postgres e geralmente recomendado por melhorar o desempenho de leitura em relação ao JSON comum.
Levou anos para entender o propósito de um document store, e ele é excelente para construir POCs (Proofs of Concept).
Há curiosidade sobre o processo de release do SQLite.
É possível testar o JSONB em snapshots de pré-lançamento ou no playground.
A ideia central da especificação do JSONB é que cada elemento começa com um cabeçalho contendo tamanho e tipo.
Estou familiarizado com o BSON do MongoDB, mas não com JSONB.
JSONB afeta o desempenho.
Seria bom existir uma forma de compactar dados JSON ao longo de várias linhas.
Apesar do formato interno, ele pode ser usado imediatamente pela aplicação.
json_eachpode aceitar parâmetros vinculados como blobs JSONB a partir da aplicação.