Réalisation de requêtes et des recherches de données
Objectifs de formation
Une fois cette unité terminée, vous pourrez :
- Utiliser des requêtes sans dégrader les performances lorsque vous travaillez avec de grandes quantités de données.
- Utiliser des requêtes de transfert en masse pour interroger efficacement de grands ensembles de données.
- Décrire les avantages de l'utilisation des tableaux fins pour maîtriser les champs fréquemment utilisés.
Rechercher une architecture
Le stockage de grandes quantités de données dans votre organisation peut avoir une incidence sur les performances et cela inclut assurément les recherches. La recherche est la capacité d'interroger des enregistrements en fonction d'un texte libre. L'architecture de recherche de Salesforce est basée sur son propre magasin de données qui est optimisé pour la recherche de ce texte.
Pour les données à rechercher, elle doit d'abord être indexée. Force.com indexe automatiquement la plupart des champs de texte afin que vos utilisateurs puissent développer des recherches inter-objets et trouver rapidement les enregistrements qui contiennent les chaînes qui vous intéressent. Les recherches indexées sont d'abord exécutées par la recherche des enregistrements appropriés dans les index, puis en affinant les résultats en fonction des autorisations d'accès, des limites de recherche et des autres filtres.
Cela crée un ensemble de résultats qui contient généralement la plupart des résultats pertinents. Lorsque l'ensemble des résultats atteint une taille prédéterminée, les enregistrements restants sont ignorés. L’ensemble des résultats est alors utilisé pour interroger des enregistrements à partir de la base de données pour récupérer les champs qu'un utilisateur peut consulter. Et lorsque de grands volumes de données sont ajoutés ou modifiés, tout ce processus peut prendre beaucoup de temps.
Utilisation des requêtes
Envisagez ce scénario : Vous avez un bel ensemble d'objets. Tout le code pour les intégrations et les pages personnalisées Visualforce a été écrit et s'exécute bien avec les données de test. Tout fonctionne bien lorsque les clients commencent à utiliser le système. Mais les performances commencent à se dégrader considérablement lorsque l'organisation charge ou accumule de grandes quantités de données.
La solution : le développement de requêtes. Cela est essentiel pour concevoir une organisation qui puisse gérer les grands volumes de données. Cela est important pour concevoir des vues de liste, des rapports et des requêtes SOQL sélectives, et pour comprendre l'optimisation des requêtes.
Requêtes SOQL et SOSL
La recherche est accessible par des requêtes SOQL ou SOSL. SOQL est le langage de requête de base de données de Force.com, similaire à SQL. Vous pouvez utiliser SOQL pour interroger des relations parent-enfant, qui sont souvent de type plusieurs-à un et pour interroger des relations parent-enfant, qui sont presque toujours de type un-à-plusieurs.
SOSL est le langage de recherche en texte intégral de Force.com. SOSL peut créer des jetons pour plusieurs termes dans un champ et peut développer un index de recherche à partir de ceux-ci. Si vous recherchez des données pour un terme spécifique distinct dont vous savez qu’il existe dans un champ, vous pouvez trouver que SOSL est plus rapide que SOQL. Toutefois, pour chaque transaction Apex individuelle, la limitation du gouverneur pour les recherches SOSL multiples est de 2 000 et de 50 000 pour les requêtes SOQL. Donc, si vous devez récupérer plus de 2000 enregistrements, SOQL représente le meilleur choix.
Le moteur Force.com Query Optimizer
Comme Salesforce utilise une architecte mutualisée, le programme d'optimisation du système de la base de données ne peut pas optimiser efficacement les requêtes Salesforce sans assistance. De sorte que la plateforme Salesforce comprend son propre programme d'optimisation des requêtes, qui exploite des champs indexés pour créer le plan d'exécution le plus efficace pour une requête donnée, ce qui aide le programme d'optimisation du système de la base de données à réaliser des plans d'exécution efficaces pour les requêtes Salesforce.
Le programme d'optimisation de requêtes de Force.com entretient un tableau des statistiques relatives à la distribution des données dans chaque index. Il utilise ce tableau pour exécuter des pré-requêtes afin de déterminer si l'utilisation de l'index peut accélérer la requête. Il fonctionne sur les requêtes qui sont automatiquement générées pour gérer les rapports, les vues de liste et les requêtes SOQL ainsi que les autres requêtes qui s'y superposent.
Apex par lot.
En général, la meilleure manière d'interroger de grands ensembles de données sur la plateforme consiste à le faire de manière asynchrone et en lots. Vous pouvez interroger et traiter jusqu'à 50 millions d'enregistrements grâce à Apex par lot.
Apex par lot ne fonctionne pas dans tous les cas d'utilisation (par exemple, si vous avez une utilisation synchrone telle qu'une page Visualforce qui nécessite d'interroger plus de 50 000 enregistrements), mais il s'agit d'un outil exceptionnel que vous devez posséder dans votre trousse à outils.
Requêtes de transfert en masse
Une autre stratégie pour interroger de grands ensembles de données consiste à utiliser les requêtes de transfert en masse. Une requête en masse peut récupérer jusqu'à 15 Go de données divisées en quinze fichiers de 1 Go. Lorsque les résultats dépassent 1 Go, des fichiers supplémentaires sont ajoutés pour compléter la réponse.
Une requête d'API de transfert prend en charge les opérations de requête et queryAll. L'opération queryAll renvoie les enregistrements qui ont été supprimés en raison d'une fusion ou d'une suppression. L'opération queryAll renvoie également des informations sur les enregistrements Tâches et Événements archivés.
Lors de l'ajout d'un lot à une tâche de requête de transfert en masse, le contenu-type dans l'en-tête de la requête doit être text/csv, application/xml ou application/json, en fonction du type de contenu spécifié lors de la création de la tâche. L'instruction SOQL actuelle fournie par le lot est au format texte brut.
Comment sont traitées les requêtes de transfert en masse
Lorsqu'une requête de transfert est traitée, Salesforce tente d'exécuter la requête. Si la requête ne s'exécute pas dans la limite standard de délai de deux minutes, la tâche échoue et une erreur QUERY_TIMEOUT est renvoyée. Le cas échéant, réécrivez la requête et renvoyez le lot.
Si la requête réussit, Salesforce tente de récupérer les résultats. Si les résultats excèdent la limite de taille de fichier de 1 Go ou si la récupération prend plus de 5 minutes, les résultats complets sont cachés et une autre tentative est effectuée. Après 30 tentatives, la tâche échoue et le message d’erreur Plus de trente nouvelles tentatives est renvoyé. Le cas échéant, envisagez d’utiliser un en-tête de segmentation PK pour diviser les résultats de la requête en segments plus petits (plus d’informations sur la segmentation PK dans l’unité suivante). Si les tentatives réussissent, les résultats sont renvoyés et stockés pendant sept jours.
Utilisation des tableaux fins
Imaginons que vous ayez suivi les meilleures pratiques de codage et travaillé avec le support client de Salesforce partout où cela est approprié, mais que vous soyez encore confronté à des problèmes de performances. Les utilisateurs se plaignent du dépassement de délai de leurs rapports et de leurs tableaux de bord, et le SOQL appelé depuis votre page Visualforce s'exécute de plus en plus lentement. Si vous avez désespérément besoin d'améliorer encore les performances, il existe une solution spéciale et puissante : les tableaux fins.
Un tableau fin est un tableau personnalisé sur la plateforme Force.com et qui contient un sous-ensemble de champs provenant d'un objet Salesforce de base standard ou personnalisé. Force.com peut posséder plusieurs tableaux fins si nécessaire, et il les maintient et les garde complètement transparents pour vous.
En ayant des lignes moins longues et moins de données à analyser que l'objet Salesforce de base, les tableaux fins permettent à Force.com de renvoyer plus de lignes par extraction de base de données, ce qui augmente le débit lors de la lecture à partir d'un objet volumineux, comme le montre ce diagramme :
En outre, les tableaux fins ne comprennent pas de ligne supprimée non définitivement (c'est-à-dire, d'enregistrements dans la corbeille avec isDeleted = true), ce qui réduit souvent le volume du tableau. Les index personnalisés dans le tableau de base sont également répliqués, et ils s'exécutent généralement mieux car le tableau réduit rejoint ce qui se produit dans les requêtes de bases de données sous-jacentes.
Voici un exemple de la manière dont un tableau fin peut accélérer les requêtes. Au lieu d'utiliser une plage de données telle que 01/01/16 à 12/31/16 — qui entraîne des calculs importants et répétés pour créer un rapport annuel cumulé jusqu'à ce jour — vous pouvez utiliser un tableau fin pour inclure un champ Année et pour filtrer selon Année = '2016.'
La plateforme Force.com synchronise automatiquement les lignes entre l'objet de base et le tableau fin afin que les données soient toujours actualisées. La plateforme Force.com détermine l'exécution des requêtes lorsqu'il est pertinent d'utiliser des tableaux fins, de sorte que vous n'avez pas à modifier vos rapports ni à développer aucun code Apex ou appels d'API.
Les tableaux fins sont principalement utiles avec des tableaux qui comportent des millions d'enregistrements. Ils peuvent être créés sur des objets personnalisés et sur les objets Compte, Contact, Opportunité, Piste et Cas. Et ils peuvent améliorer les performances des rapports, des vues de liste et de SOQL.
Les tableaux fins peuvent constituer un moyen pratique pour remédier aux problèmes de performances. Mais ils ne sont pas adaptés à tous les cas d'utilisation et peuvent ne pas faire mieux que lire dans l'objet de base Salesforce avec des index efficaces. Ils entraînent des effets secondaires que vous devez comprendre, car ils pourraient restreindre ou imposer une charge à vos processus métier.
Voici quelques éléments à prendre en compte avant de mettre en œuvre des tableaux fins :
-
Les tableaux fins sont fins. Pour assurer des performances optimales, ils contiennent seulement l'ensemble minimum des champs requis pour répondre à des cas d'utilisation professionnels particuliers. Si par la suite vous décidez d'ajouter un champ à votre rapport ou à votre requête SOQL, vous devez contacter le Support client de Salesforce pour recréer le tableau.
-
Si vous utilisez des sandbox Full, les tableaux fins seront copiés dans vos organisations sandbox Full. Si vous utilisez d’autres types de sandbox, les tableaux fins ne seront pas copiés dans vos organisations sandbox. Pour activer les tableaux fins de production dans des types de sandbox autres que Full, contactez le support client de Salesforce.
-
Les tableaux fins sont des tableaux personnalisés dans la base de données Force.com sous-jacente. Ils n'ont pas la flexibilité des métadonnées dynamiques que vous pouvez trouver dans l'objet de base. Si vous modifiez un type de champ (par exemple, si vous modifiez un champ numérique en un champ de texte), le tableau fin devient erroné, et vous devez contacter le Support client de Salesforce pour créer un nouveau tableau fin.
Maintenant que vous disposez de quelques outils pour accélérer les recherches qui impliquent de grands volumes de données, passez à l'unité suivante pour avoir des informations sur les charges de données.
Ressources
- Développeur Salesforce : Approches à long et à court terme pour la personnalisation des performances de Force.com
- Développeur Salesforce : Utilisation des très grandes requêtes SOQL
- PDF : Meilleures pratiques SOQL Force.com : Nulls and Formula Fields
- PDF : Force.com SOQL and SOSL Reference
- Développeur Salesforce : Meilleures pratiques pour les déploiements avec de très grandes quantités de données/SOQL et SOSL
- Développeur Salesforce : Comment sont traitées les requêtes de transfert en masse
- Développeur Salesforce : Meilleures pratiques pour les déploiements avec de très grandes quantités de données
- Développeur Salesforce : Présentation d'un exemple de requête de transfert en masse
- PDF : Référence de l'optimisation des requêtes et des recherches