Quão bem o tipo Postgre JSON é otimizado para grandes documentos JSON? Estou especialmente preocupado com a recuperação parcial (por exemplo, o custo de obter os últimos N itens de uma matriz JSON ou procurar um item específico em um dict JSON) em situações em que o objeto JSON tem vários MB de tamanho e é muito grande para ser carregado com eficiência na íntegra.
Histórico: estou trabalhando com um conjunto de dados em que cada registro tem 10.000 anotações. Não preciso dessas anotações totalmente indexadas, mas preciso que o registro seja inserido rapidamente, por isso estou pensando em armazená-las em um campo JSON em vez de criar milhares de linhas adicionais em uma tabela de mapeamento.
Isso está relacionado ao PostgreSQL 9.3.
No PostgreSQL 9.3, o desempenho será bastante ruim para documentos json grandes. Todo o documento deve ser analisado para acessar um campo, indexar um array, etc. Ele é armazenado em disco como uma simples representação de texto, o texto json.
O PostgreSQL 9.4 provavelmente mudará isso, com suporte para armazenamento jsonb em disco. Ele ainda terá que ler todo o objeto json do disco para acessar qualquer parte dele, mas não terá os mesmos tipos de sobrecarga de análise que você verá em 9.3. Ele também obterá muitos dos recursos de indexação do
hstore
.No 9.3, eu suspeito fortemente que o
hstore
, que é armazenado em uma representação binária compacta no disco e suporta uma variedade de recursos de indexação, é muito mais apropriado para suas necessidades.Pode ser que ajude: Na instrução sql, adicionei este 'cast' onde tenho o campo json:
o tipo de dados de 'data' na tabela map_file é: json