Fazer consultas e pesquisas de dados
Objetivos de aprendizagem
Após concluir esta unidade, você estará apto a:
- Usar consultas sem prejudicar o desempenho durante o trabalho com grandes volumes de dados.
- Usar consultas em massa para consultar grandes conjuntos de dados com eficiência.
- Descrever os benefícios de usar as tabelas mínimas para conter os campos usados com frequência.
Arquitetura de pesquisa
Armazenar quantidades enormes de dados em sua organização pode afetar o desempenho, o que certamente inclui as pesquisas. A pesquisa é a capacidade de consultar registros com base no texto em formato livre. A arquitetura de pesquisa do Salesforce se baseia em seu próprio armazenamento de dados, que é otimizado para pesquisar o texto em questão.
Para que os dados possam ser pesquisados, primeiro, eles precisam ser indexados. O Force.com indexa automaticamente a maioria dos campos de texto para que os usuários possam criar pesquisas de objetos cruzados e encontrar rapidamente os registros que contêm as sequências de caracteres de interesse. As pesquisas indexadas funcionam assim: primeiro, faz-se uma pesquisa nos índices em busca dos registros apropriados; depois, os resultados são limitados com base em permissões de acesso, limites de pesquisa e outros filtros.
Isso cria um conjunto de resultados que geralmente contém os resultados mais relevantes. Depois que o conjunto de resultados alcança um tamanho predefinido, os registros restantes são descartados. Então, o conjunto de resultados é usado para consultar os registros do banco de dados a fim de recuperar os campos que o usuário vê. Quando grandes volumes de dados são adicionados ou alterados, todo esse processo pode demorar muito tempo.
Como usar consultas
Imagine este cenário: você tem um conjunto bem organizado de objetos. Todo o código das integrações e das páginas personalizadas do Visualforce foi escrito e funciona bem com os dados de teste. Tudo corre bem quando os clientes começam a usar o sistema. Mas o desempenho começa a piorar bastante quando a organização carrega ou acumula uma grande quantidade de dados.
A criação de consultas é a solução. Ela é essencial para o design de uma organização que consiga manejar grandes volumes de dados (LDV). É importante para elaborar modos de exibição de lista, relatórios e consultas SOQL seletivas, e para compreender a otimização de consultas.
Consultas SOQL e SOSL
A pesquisa pode ser acessada com consultas SOQL ou SOSL. SOQL é a linguagem de consultas do banco de dados do Force.com, semelhante a SQL. Você pode usar SOQL para consultar os relacionamentos de filho para pai, que costumam ser do tipo “muitos para um”, e relacionamentos de pai para filho, que quase sempre são do tipo “um para muitos”.
SOSL é a linguagem de pesquisa com texto completo do Force.com. A SOSL pode gerar tokens dos vários termos que estão dentro de um campo e criar um índice de pesquisa a partir disso. Se estiver procurando um termo diferente específico que você sabe que existe dentro de um campo, talvez a SOSL seja mais rápida que a SOQL. Porém, para cada transação do Apex, o limite de administrador para várias consultas SOSL em uma única transação é 2.000; para consultas SOQL, é 50.000. Então, se for preciso recuperar mais de 2.000 registros, a SOQL é a melhor opção.
O Otimizador de consultas do Force.com
Como o Salesforce usa uma arquitetura de multilocatário, sozinho, o otimizador do sistema do banco de dados não consegue otimizar com eficácia as consultas do Salesforce. Então, a Salesforce Platform contém seu próprio otimizador de consultas, que aproveita os campos indexados para criar o plano de execução mais eficiente para determinada consulta, ajudando o otimizador do sistema do banco de dados a produzir planos de execução eficazes para as consultas do Salesforce.
O otimizador de consultas do Force.com mantém uma tabela de estatísticas sobre a distribuição de dados em cada índice. Ele usa essa tabela para executar pré-consultas que determinam se usar o índice pode acelerar a consulta. Ele trabalha nas consultas geradas automaticamente para lidar com os relatórios, os modos de exibição de lista, as consultas SOQL e as outras consultas feitas com base nessas.
Apex em lote
Em geral, a melhor forma de consultar e processar grandes conjuntos de dados na plataforma Force.com é fazer isso de forma assíncrona em lotes. É possível consultar e processar até 50 milhões de registros usando o Apex em lote.
O Apex em lote não funciona em todos os casos de uso (por exemplo, em casos de uso síncrono, como uma página do Visualforce que precise consultar mais de 50.000 registros), mas é uma ótima ferramenta para ter à mão.
Consultas em massa
Outra estratégia para consultar grandes conjuntos de dados com eficiência é usar as consultas em massa. A consulta em massa pode recuperar até 15 GB de dados, divididos em quinze arquivos de 1 GB. Quando os resultados excedem 1 GB, arquivos adicionais são adicionados para completar a resposta.
A consulta de API em massa é compatível com operações dos tipos consulta (“query”) e queryAll. A operação queryAll retorna registros que foram excluídos por causa de uma mesclagem ou exclusão. A operação queryAll também retorna informações sobre os registros arquivados de Tarefa e Evento.
Ao adicionar um lote a um trabalho de consulta em massa, o Content-Type no cabeçalho da solicitação deve ser text/csv, application/xml ou application/json, dependendo do tipo de conteúdo especificado na criação do trabalho. A declaração SOQL real fornecida para esse lote está em formato de texto simples.
Como as consultas em massa são processadas
Quando uma consulta em massa é processada, o Salesforce tenta executá-la. Se a consulta não for executada dentro do tempo limite padrão de dois minutos, o trabalho será reprovado e um erro QUERY_TIMEOUT será retornado. Caso isso aconteça, reescreva uma consulta mais simples e reenvie o lote.
Se a consulta for bem-sucedida, o Salesforce tentará recuperar os resultados. Caso os resultados excedam o limite de 1 GB do tamanho do arquivo ou demorem mais de 5 minutos para serem recuperados, os resultados concluídos são armazenados em cache e outra tentativa é feita. Depois de 30 tentativas, o trabalho é reprovado e a mensagem de erro Retried more than thirty times (Mais de 30 tentativas realizadas) é retornada. Caso isso aconteça, considere usar o cabeçalho PK Chunking para dividir os resultados da consulta em trechos menores (mais sobre o PK Chunking em uma unidade posterior). Caso a tentativa seja bem-sucedida, os resultados serão retornados e armazenados por sete dias.
Como usar as tabelas mínimas
Digamos que você seguiu as práticas recomendadas de codificação e trabalhou com o Suporte ao cliente da Salesforce para colocar os índices personalizados sempre que fosse adequado, mas ainda está enfrentando problemas de desempenho. Os usuários estão reclamando porque o tempo limite dos relatórios e painéis tem sido excedido, e o desempenho da SOQL chamada pela sua página do Visualforce está cada vez mais lento. Quando alguém precisa desesperadamente melhorar o desempenho, pode contar com uma solução especial poderosa: as tabelas mínimas.
A tabela mínima é uma tabela personalizada na plataforma Force.com que contém um subconjunto de campos de um objeto de base do Salesforce padrão ou personalizado. O Force.com pode abrigar várias tabelas mínimas, se necessário, fazer a manutenção delas e deixá-las totalmente transparentes para você.
Com linhas mais estreitas e menos dados para varrer do que o objeto de base do Salesforce, as tabelas mínimas permitem que o Force.com retorne mais linhas por busca no banco de dados, aumentando a produtividade durante a leitura de grandes objetos. Isso é ilustrado pelo diagrama abaixo:
Além disso, as tabelas mínimas não contêm linhas de exclusão reversível (ou seja, registros na Lixeira em que isDeleted = true), o que frequentemente reduz o volume da tabela. Os índices personalizados na tabela de base também são replicados, e normalmente têm desempenho melhor por causa da redução nas associações da tabela que acontecem nas consultas subjacentes ao banco de dados.
Aqui está um exemplo de como uma tabela mínima pode acelerar as consultas. Em vez de usar um intervalo de datas como 01/01/2016 a 31/12/2016, o que emprega processamento precioso e repetido para criar um relatório anual ou desde o início do ano até o dia de hoje, você pode usar uma tabela mínima para incluir um campo Ano e filtrar por Ano = “2016”.
A plataforma Force.com sincroniza automaticamente as linhas entre o objeto de base e a tabela mínima, de modo que os dados estejam sempre atualizados. A plataforma Force.com determina no tempo de execução da consulta o momento em que faria sentido usar as tabelas mínimas. Assim, você não precisa modificar seus relatórios ou desenvolver código do Apex ou chamadas de API.
As tabelas mínimas são mais úteis com aquelas tabelas que contêm milhões de registros. Elas podem ser criadas em objetos personalizados e em objetos de Conta, Contato, Oportunidade, Lead e Caso. E também podem melhorar o desempenho de relatórios, modos de exibição de lista e SOQL.
As tabelas mínimas podem ser um jeito conveniente de corrigir problemas de desempenho. No entanto, nem sempre atendem a todos os casos de uso ou tornam o desempenho melhor do que a leitura a partir do objeto de base do Salesforce com índices eficientes. Você precisa estar ciente de alguns efeitos colaterais que podem restringir ou sobrecarregar seus processos comerciais.
Veja alguns fatores a considerar antes de implementar as tabelas mínimas:
-
As tabelas mínimas são mínimas. Para garantir o melhor desempenho, elas contêm apenas o conjunto mínimo de campos necessários para atender a casos de uso empresarial específicos. Caso mais tarde você decida adicionar um campo ao relatório ou à consulta SOQL, será preciso entrar em contato com o Suporte ao cliente da Salesforce para recriar a tabela.
-
Para sandboxes completas: As tabelas mínimas são copiadas para suas organizações de sandboxes completas. Para outros tipos de sandboxes: As tabelas mínimas não são copiadas para suas organizações de sandbox. Para que as tabelas mínimas de produção sejam ativadas para tipos de sandbox que não sejam as sandboxes completas, entre em contato com o Suporte ao cliente da Salesforce.
-
As tabelas mínimas são tabelas personalizadas no banco de dados subjacente do Force.com. Elas não têm a flexibilidade dinâmica dos metadados que você encontra no objeto de base. Quando você altera algum tipo de campo (por exemplo, troca um campo de número por um campo de texto), a tabela mínima é invalidada e é necessário falar com o Suporte ao cliente da Salesforce para criar uma nova.
Agora que você já tem algumas ferramentas para acelerar as pesquisas envolvendo grandes volumes de dados, prossiga para a próxima unidade e descubra toda a verdade sobre as cargas de dados.
Recursos
- Desenvolvedor do Salesforce: Long- and Short-Term Approaches for Tuning Force.com Performance
- Desenvolvedor do Salesforce: Working with Very Large SOQL Queries
- PDF: Force.com SOQL Best Practices: Nulls and Formula Fields
- Desenvolvedor do Salesforce: Melhores práticas para implementações com grandes volumes de dados/SOQL e SOSL
- Desenvolvedor do Salesforce: How Bulk Queries Are Processed
- Desenvolvedor do Salesforce: Best Practices for Deployments with Large Data Volumes
- Desenvolvedor do Salesforce: Walk Through a Bulk Query Sample
- PDF: Query & Search Optimization Cheat Sheet