O modo nativo do Firestore consiste em dois conjuntos de operações: o Firestore Core e as operações de pipeline do Firestore.
As operações principais do Firestore oferecem a funcionalidade padrão de criação, leitura, atualização e exclusão (CRUD) de documentos, além de suporte integrado para consultas de detecção em tempo real e persistência off-line. Uma diferença operacional distinta nesta edição é que os índices são opcionais e não são criados automaticamente para campos únicos. Isso permite que as consultas sejam executadas sem configuração de índice inicial, mas as consultas não indexadas vão verificar toda a coleção por padrão. Isso pode aumentar a latência e os custos à medida que o conjunto de dados cresce.
As operações de pipeline do Firestore são um recurso central da edição Enterprise do Firestore, criadas em um novo mecanismo de consulta avançado para expandir significativamente o intervalo de consultas possíveis. As operações de pipeline do Firestore usam uma sintaxe de consulta flexível e um método de indexação distinto em que os índices são opcionais e não são criados automaticamente, permitindo operações avançadas de recuperação de dados para aplicativos.
Recursos das operações principais do Firestore
As operações principais permitem operações CRUD padrão e consultas de detecção em tempo real. No entanto, ao usar essas operações na edição Enterprise, o comportamento subjacente em relação à indexação e ao faturamento muda significativamente em comparação com a edição Standard.
Funcionalidade e continuidade
As operações principais mantêm a sintaxe familiar de encadeamento de métodos (por exemplo, .where(), .orderBy()) usada na edição Standard. Essas operações oferecem suporte a
consultas de escuta em tempo real e persistência off-line para clientes da Web e de dispositivos móveis. Recomendamos usar essas operações para cargas de trabalho transacionais padrão, pesquisas simples e migração de código de aplicativo atual.
Indexação personalizada
Ao contrário da edição Standard, a operação Core na edição Enterprise não cria automaticamente índices de campo único. Os índices são opcionais e não são necessários para executar uma consulta. Se um índice específico estiver faltando, a consulta vai realizar uma verificação completa da coleção. Embora as consultas não indexadas permitam a prototipagem rápida, elas podem ter um desempenho mais lento e custar mais à medida que o conjunto de dados cresce. Os desenvolvedores precisam criar índices manualmente para otimizar o desempenho das consultas e reduzir o consumo de unidades de leitura.
Modelo de faturamento (baseado em unidades)
As unidades de leitura são cobradas em tranches de 4 KB, e não por contagem de documentos. Uma consulta não indexada que verifica uma grande coleção consome unidades de leitura com base no total de bytes verificados em todos os documentos. As unidades de gravação são cobradas em incrementos de 1 KB. A gravação de um documento consome unidades para os dados mais unidades adicionais para cada entrada de índice atualizada. Ao contrário da edição Standard, que impõe a indexação automática de campo único, agora é possível escolher campos específicos para indexar e otimizar os custos de gravação e o desempenho.
Recursos das operações do pipeline do Firestore
A edição Enterprise do Firestore com operações de pipeline usa um mecanismo de consulta avançado que remove muitas limitações da edição Standard do Firestore. As operações de pipeline do Firestore oferecem centenas de recursos de consulta adicionais. As operações de pipeline do Firestore têm os seguintes recursos:
Sintaxe combinável baseada em estágios
As consultas de pipeline são criadas definindo uma série de estágios sequenciais que são executados em ordem. Isso permite operações complexas, como filtrar o resultado de uma agregação, o que não era possível antes.
O exemplo a seguir mostra uma consulta de pipeline que encontra o número de IDs de produtos exclusivos visualizados no último mês:
guard let cutoffDate = Calendar.current.date(byAdding: .month, value: -1, to: Date()) else {
return
}
let snapshot = try await db.pipeline()
.collection("productViews")
.where(Field("viewedAt").greaterThan(cutoffDate.timeIntervalSince1970))
.aggregate([Field("productId").countDistinct().as("uniqueProductViews")])
.execute()
Recursos ampliados
A consulta de pipelines apresenta vários recursos novos, incluindo:
- Agregações: suporte para novas funções de agregação (como
sum(...),min(...)ecount_distinct(...)) combinadas com campos de agrupamento arbitrários. - Filtragem complexa: suporte para centenas de funções adicionais para expressar instruções
where(...)arbitrariamente complexas, incluindoregex_match(...),add(...)estr_contains(...), tudo sem requisitos de índice rígidos. - Leituras / projeções parciais: recupere subconjuntos dinâmicos de documentos usando
select(...),remove_fields(...)e muitas outras etapas de manipulação de documentos.
Para saber mais sobre esses recursos, consulte Consultar dados com operações de pipeline.
Suporte em tempo real e off-line
Para usar o suporte em tempo real ou off-line, os desenvolvedores podem usar as operações principais do Firestore na edição Enterprise do Firestore.
Integração de clientes e ferramentas
A edição Enterprise inclui recursos especializados para interagir com consultas de pipeline e gerenciá-las:
- Explicação e criação de perfil de consultas: use os resultados do Query Explain para entender quantas unidades de leitura ou gravação uma consulta consome e analisar a execução dela.
- Insights de consulta: a edição Enterprise é compatível com o Query Insights, que ajuda a determinar onde os índices podem ser criados para melhorar a performance e o custo, oferecendo visibilidade das principais consultas executadas no banco de dados e das características de performance delas.
- Novos tipos de índice: é possível criar índices especializados para a edição Enterprise, incluindo tipos como esparso, não esparso e exclusivo. Ele também permite criar e editar índices de pesquisa vetorial para bancos de dados empresariais.
Diferenças entre o Firestore Standard e o Firestore Enterprise
A principal diferença operacional entre as operações principais e de pipeline está no gerenciamento da indexação, que afeta diretamente o desempenho e o custo.
| Firestore Standard: operações principais | Firestore Enterprise: operações principais e de pipeline | |
| Requisito de indexação | Os índices são obrigatórios para consultas.
Os índices para campos individuais são criados automaticamente, enquanto as consultas mais complexas dependem de índices compostos ou de grupo de coleções que precisam ser configurados manualmente. |
Os índices não são necessários e, portanto, são opcionais para consultas.
Você define os índices conforme necessário. A edição Enterprise também oferece suporte a uma variedade maior de tipos de índice, incluindo não esparso/esparso e índices exclusivos. |
| Desempenho | Consultas indexadas: o desempenho e o custo são escalonados com o tamanho do conjunto de resultados. |
Consultas não indexadas: o desempenho e o custo são escalonados com o tamanho do conjunto de dados. Consultas indexadas: o desempenho e o custo são escalonados com o tamanho do conjunto de resultados. Recomendamos usar as ferramentas Explicação da consulta e Query Insights para criar índices e melhorar a performance e o custo das suas consultas. |
| Implicação de custo de armazenamento | Você incorre em sobrecarga de armazenamento de índices automáticos e compostos. | Você economiza em custos de armazenamento porque os índices não são criados automaticamente para todos os campos. |
| Base de custo | Cobrança por operação de leitura, gravação e exclusão de documento. | Cobrado por unidade de leitura (blocos de 4 KB) e unidade de gravação (blocos de 1 KB). A gravação de entradas de índice consome unidades de gravação.
Confira alguns exemplos dos novos preços. |
| Regras de segurança | As regras de segurança protegem as coleções verificando as permissões de leitura/gravação. | As regras de segurança protegem as coleções verificando as permissões de leitura/gravação. Saiba como modelar seus dados para oferecer suporte a consultas de pipeline no guia Modelo de dados. |