Skip to main content

Durchführen von Datenabfragen und -suchen

Lernziele

Nachdem Sie diese Lektion abgeschlossen haben, sind Sie in der Lage, die folgenden Aufgaben auszuführen:

  • Verwenden von Abfragen ohne Performance-Beeinträchtigung bei der Arbeit mit großen Datenvolumen
  • Verwenden von Massenabfragen, um große Datensets effizient abzufragen
  • Beschreiben der Vorteile von Skinny-Tabellen für häufig verwendete Felder

Sucharchitektur

Das Speichern großer Datenmengen in Ihrer Organisation kann die Performance beeinträchtigen, und das schließt definitiv auch Suchvorgänge ein. Suchen bieten die Möglichkeit, Datensätze auf Basis von Freitext abzufragen. Die Salesforce-Sucharchitektur basiert auf einem eigenen Datenspeicher, der für die Suche nach diesem Text optimiert ist.

Damit Daten durchsucht werden können, müssen sie zunächst indiziert werden. Force.com indiziert die meisten Textfelder automatisch, sodass Ihre Benutzer objektübergreifende Suchvorgänge erstellen und Datensätze, die relevante Zeichenfolgen enthalten, schnell finden können. Indizierte Suchen werden durchgeführt, indem zuerst die Indizes nach geeigneten Datensätzen durchsucht und die Ergebnisse dann auf der Grundlage von Zugriffsberechtigungen, Sucheinschränkungen und anderen Filtern eingegrenzt werden.

Dadurch entsteht eine Ergebnismenge, die typischerweise die relevantesten Ergebnisse enthält. Wenn die Ergebnismenge eine vorgegebene Größe erreicht hat, werden die restlichen Datensätze verworfen. Die Ergebnismenge wird dann zum Abfragen der Datensätze aus der Datenbank verwendet, um die Felder abzurufen, die ein Benutzer sieht. Und wenn große Datenvolumen hinzugefügt oder geändert werden, kann dieser ganze Prozess lange dauern.

Verwenden von Abfragen

Stellen Sie sich folgendes Szenario vor: Sie verfügen über einen schön schlanken Satz von Objekten. Der gesamte Code für Integrationen und benutzerdefinierte Visualforce-Seiten wurde geschrieben und funktioniert mit den Testdaten einwandfrei. Alles läuft gut, als Kunden das System anfänglich benutzen. Dann jedoch verschlechtert sich die Leistung ernsthaft, wenn die Organisation eine große Menge an Daten lädt oder anhäuft.

Die Lösung: Abfrageerstellung. Sie ist der Schlüssel zur Entwicklung einer Organisation, die mit großen Datenvolumen umgehen kann. Es ist wichtig, selektive Listenansichten, Berichte und SOQL-Abfragen zu entwerfen und die Abfrageoptimierung zu verstehen.

SOQL- und SOSL-Abfragen im Vergleich

Der Zugriff auf die Suchfunktion kann mit SOQL- oder SOSL-Abfragen erfolgen. SOQL ist die Datenbankabfragesprache von Force.com, ähnlich wie SQL. Sie können SOQL verwenden, um Beziehungen zwischen unter- und übergeordneten Elementen abzufragen, die häufig n:1-Beziehungen sind, und, um Beziehungen zwischen übergeordneten und untergeordneten Elementen abzufragen, die fast immer 1:n-Beziehungen sind.

SOSL ist die Force.com-Sprache für Volltextsuchen. SOSL kann mehrere Begriffe innerhalb eines Felds tokenisieren und daraus einen Suchindex erstellen. Wenn Sie nach einem bestimmten Begriff suchen, von dem Sie wissen, dass er in einem Feld vorkommt, können Sie ihn mit SOSL schneller finden als mit SOQL. Für jede Apex-Transaktion gilt jedoch eine Obergrenze für mehrere SOSL-Suchen in einer einzelnen Transaktion von 2000; bei SOQL-Abfragen beträgt die Obergrenze 50000. Falls Sie also mehr als 2.000 Datensätze abrufen müssen, ist SOQL die bessere Wahl.

Der Force.com Query Optimizer

Da Salesforce eine mandantenfähige Architektur verwendet, kann der Optimierer des Datenbanksystems Salesforce-Abfragen nicht ohne Unterstützung effektiv optimieren. Daher enthält die Salesforce-Plattform einen eigenen Abfrageoptimierer, der indizierte Felder nutzt, um den effizientesten Ausführungsplan für die jeweilige Abfrage zu erstellen und den Optimierer des Datenbanksystems bei der Erstellung effektiver Ausführungspläne für Salesforce-Abfragen zu unterstützen.

Der Force.com-Abfrageoptimierer pflegt eine Tabelle mit Statistiken über die Verteilung der Daten in jedem Index. Er verwendet diese Tabelle für die Durchführung von Vorabfragen, um festzustellen, ob die Verwendung des Index die Abfrage beschleunigen kann. Der Optimierer funktioniert bei Abfragen, die automatisch generiert werden, um Berichte, Listenansichten und sowohl SOQL-Abfragen als auch die anderen Abfragen zu verarbeiten, die sich auf diese beziehen.

Batch-Apex

Im Allgemeinen besteht der beste Weg, große Datensets in der Force.com-Plattform abzufragen und zu verarbeiten, darin, dies asynchron in Batches durchzuführen. Mit Batch-Apex können Sie bis zu 50 Millionen Datensätze abfragen und verarbeiten.

Batch-Apex funktioniert nicht in allen Anwendungsfällen (z. B. bei einem synchronen Anwendungsfall wie einer Visualforce-Seite, bei dem mehr als 50.000 Datensätze abgefragt werden müssen), ist jedoch ein großartiges Tool in Ihrem Toolkit.

Massenabfragen

Eine weitere Strategie für die effiziente Abfrage großer Datensets ist die Verwendung von Massenabfragen. Eine Massenabfrage kann bis zu 15 GB Daten abrufen, aufgeteilt in fünfzehn Dateien zu je 1 GB. Wenn die Ergebnisse 1 GB übersteigen, werden weitere Dateien hinzugefügt, um die Antwort zu vervollständigen.

Eine Bulk-API-Abfrage unterstützt sowohl query- als auch queryAll-Vorgänge. Der Vorgang queryAll gibt Datensätze zurück, die aufgrund einer Zusammenführung oder Löschung gelöscht wurden. Außerdem gibt er Informationen über archivierte Aufgaben- und Ereignisdatensätze zurück.

Wenn Sie einen Batch zu einem Massenabfrageauftrag hinzufügen, muss der Content-Type in der Kopfzeile der Anforderung entweder text/csv, application/xml oder application/json lauten. Dies hängt davon ab, welcher Inhaltstyp beim Erstellen des Auftrags festgelegt wurde. Die eigentliche SOQL-Anweisung, die für den Batch angegeben wird, liegt als unformatierter Text vor.

Verarbeitung von Massenabfragen

Wenn eine Massenabfrage verarbeitet wird, versucht Salesforce, die Abfrage auszuführen. Wenn die Abfrage nicht innerhalb des standardmäßigen Zeitüberschreitungslimits von zwei Minuten ausgeführt wird, schlägt der Auftrag fehl und es wird ein QUERY_TIMEOUT-Fehler zurückgegeben. Schreiben Sie in diesem Fall eine einfachere Abfrage und senden Sie den Batch erneut.

Wenn die Abfrage erfolgreich ausgeführt wurde, versucht Salesforce, die Ergebnisse abzurufen. Wenn die Ergebnisse die Dateigrößenobergrenze von 1 GB überschreiten oder ihr Abruf länger als fünf Minuten dauert, werden die fertig gestellten Ergebnisse zwischengespeichert und ein weiterer Versuch wird unternommen. Nach 30 Versuchen schlägt der Auftrag fehl und die Fehlermeldung Retried more than thirty times wird zurückgegeben. In diesem Fall sollten Sie erwägen, die Zeichenfolge zur Blockerstellung für Primärschlüssel zu verwenden, um die Abfrageergebnisse in kleinere Blöcke aufzuteilen (mehr zur Blockerstellung für Primärschlüssel finden Sie in einer späteren Einheit). Werden die Versuche erfolgreich ausgeführt, werden die Ergebnisse zurückgegeben und sieben Tage lang gespeichert.

Verwendung von Skinny-Tabellen

Nehmen wir an, Sie haben bewährte Vorgehensweisen für die Programmierung befolgt und mit dem Salesforce-Kundensupport zusammengearbeitet, um benutzerdefinierte Indizes zu platzieren, wo dies angemessen ist, aber Sie haben immer noch Probleme mit der Leistung. Benutzer beschweren darüber, dass ihre Berichte und Dashboards wegen Zeitüberschreitung angebrochen werden, und die von Ihrer Visualforce-Seite aufgerufene SOQL wird immer langsamer ausgeführt. Wenn Sie verzweifelt nach Möglichkeiten suchen, die Performance zu verbessern, dann gibt es eine spezielle, leistungsstarke Lösung: Skinny-Tabellen.

Eine Skinny-Tabelle ist eine benutzerdefinierte Tabelle in der Force.com-Plattform, die eine Teilmenge von Feldern aus einem standardmäßigen oder benutzerdefinierten Salesforce-Basisobjekt enthält. In Force.com können bei Bedarf mehrere Skinny-Tabellen angelegt werden, die für Sie völlig transparent gepflegt und beibehalten werden.

Durch engere Zeilen und weniger zu scannende Daten als das Salesforce-Basisobjekt ermöglichen Skinny-Tabellen Force.com, mehr Zeilen pro Datenbankabruf zurückzugeben, was den Durchsatz beim Lesen aus einem großen Objekt erhöht. Dies zeigt auch dieses Diagramm:

Skinny Tables graphic.png

Außerdem enthalten Skinny-Tabellen keine vorübergehend gelöschten Zeilen (d. H. Zeilen im Papierkorb mit isDeleted = true), was die Tabellengröße meist reduziert. Benutzerdefinierte Indizes für die Basistabelle werden ebenfalls repliziert und bieten aufgrund der reduzierten Tabellen-Joins, die in den zugrunde liegenden Datenbankabfragen auftreten, in der Regel bessere Leistung.

Hier ist ein Beispiel dafür, wie eine Skinny-Tabelle Abfragen beschleunigen kann. Anstatt einen Datumsbereich wie 01.01.16 bis 31.12.16 zu verwenden, was eine kostspielige, wiederholte Berechnung zur Erstellung eines Jahres- oder Jahr-bis-dato-Berichts erfordert, können Sie eine Skinny-Tabelle verwenden, um ein Feld "Year" einzuschließen und nach Year ='2016' filtern.

Die Force.com-Plattform synchronisiert die Zeilen zwischen dem Basisobjekt und der Skinny-Tabelle automatisch, sodass die Daten immer auf dem neuesten Stand sind. Die Force.com-Plattform bestimmt zur Laufzeit der Abfrage, wann es sinnvoll wäre, Skinny-Tabellen zu verwenden, sodass Sie Ihre Berichte nicht ändern oder Apex-Code bzw. API-Aufrufe entwickeln müssen.

Skinny-Tabellen sind besonders nützlich bei Tabellen mit Millionen von Datensätzen. Sie können für benutzerdefinierte Objekte sowie für Account-, Kontakt-, Opportunity-, Lead- und Kundenvorgangsobjekte erstellt werden. Außerdem können sie die Performance für Berichte, Listenansichten und SOQL verbessern.

Skinny-Tabellen können ein praktisches Mittel zur Behebung von Leistungsproblemen sein. Sie decken jedoch möglicherweise nicht alle Anwendungsfälle ab und verbessern die Leistung auch nur beim Lesen aus dem Salesforce-Basisobjekt mit effizienten Indizes. Sie haben Nebenwirkungen, die Sie verstehen sollten, da sie Ihre Geschäftsprozesse einschränken oder belasten können.

Vor der Implementierung von Skinny-Tabellen sollten Sie folgende Punkte wissen:

  • Skinny-Tabellen sind "mager". Um eine optimale Performance zu gewährleisten, enthalten sie nur die Mindestanzahl an Feldern, die zur Erfüllung bestimmter unternehmerischer Anwendungsfälle erforderlich sind. Wenn Sie sich später entscheiden, ein Feld zu Ihrem Bericht oder Ihrer SOQL-Abfrage hinzuzufügen, müssen Sie den Salesforce-Kundendienst bitten, die Tabelle neu zu erstellen.
  • Für vollständige Sandboxes: Skinny-Tabellen werden in Ihre vollständigen Sandbox-Organisationen kopiert. Für andere Sandbox-Typen: Skinny-Tabellen werden nicht in Ihre Sandbox-Organisationen kopiert. Wenn Skinny-Tabellen für die Produktion für andere Sandbox-Typen als "Vollständig" aktiviert werden sollen, wenden Sie sich an den Salesforce-Kundensupport.
  • Skinny-Tabellen sind benutzerdefinierte Tabellen in der zugrunde liegenden Force.com-Datenbank.. Sie verfügen nicht über die dynamische Metadatenflexibilität des Basisobjekts. Wenn Sie einen Feldtyp ändern (z. B. ein Zahlenfeld in ein Textfeld ändern), wird die Skinny-Tabelle ungültig und Sie müssen den Salesforce-Kundendienst kontaktieren, um eine neue Skinny-Tabelle zu erstellen.

Sie verfügen jetzt über einige Tools, mit denen Sie Suchvorgänge in großen Datenvolumen beschleunigen können. Fahren Sie nun mit der nächsten Einheit fort, um Informationen über Datenladevorgänge zu erhalten.

Ressourcen

Teilen Sie Ihr Trailhead-Feedback über die Salesforce-Hilfe.

Wir würden uns sehr freuen, von Ihren Erfahrungen mit Trailhead zu hören: Sie können jetzt jederzeit über die Salesforce-Hilfe auf das neue Feedback-Formular zugreifen.

Weitere Infos Weiter zu "Feedback teilen"