Vorgehensweise: Steigern der Leistung der Business Connectivity Services-Lösung bei Verwendung des Cache
Letzte Änderung: Mittwoch, 30. Juni 2010
Gilt für: SharePoint Server 2010
Inhalt dieses Artikels
Verwenden eines Versionsfelds zum Minimieren von Aufrufen an die externe Datenquelle
Aktivieren von Zuordnungen nur dann, wenn sie unbedingt notwendig sind
Verwenden von zwei Abonnements statt eines, wenn zusammenhängende Daten benötigt werden
Angeben der zu synchronisierenden Elemente mithilfe von expliziten Identitäten im Abonnement
Angeben von Filtern zum Reduzieren der von der Clientanwendung heruntergeladenen Datenmenge
Beispiel
Beim Entwerfen einer Business Connectivity Services-Lösung, in der der Cache verwendet wird, können Sie die folgenden bewährten Methoden berücksichtigen. Dadurch können Sie den Cachenutzung und die Leistung Ihrer Anwendung optimieren:
Setzen Sie ein Versionsfeld ein, falls verfügbar, um Aufrufe an die externe Anwendung zu minimieren.
Aktivieren Sie Zuordnungen nur, wenn es für die Anwendung erforderlich ist, und stellen Sie sicher, dass Zuordnungen nicht versehentlich von Benutzern aktiviert werden können.
Wenn Sie miteinander zusammenhängende Daten benötigen, verwenden Sie statt eines Abonnements mit einer Abonnementzuordnung zwei Abonnements.
Geben Sie die zu synchronisierenden Elemente mithilfe von expliziten Identitäten im Abonnement an.
Geben Sie Filter an, um die durch die Clientanwendung heruntergeladene Datenmenge zu reduzieren.
Sehen wir uns diese bewährten Methoden im Einzelnen an.
Verwenden eines Versionsfelds zum Minimieren von Aufrufen an die externe Datenquelle
Durch Verwenden eines Versionsfelds in der externen Datenquelle können Sie die Zahl der Aufrufe an die externe Datenquelle erheblich verringern. Ein Versionsfeld kann ein inkrementelles Nummernfeld sein, das die Version der Entitätsinstanz angibt, oder ein LastModified-Zeitstempel, der angibt, wann die Entitätsinstanz das letzte Mal in der externen Datenquelle aktualisiert wurde. Ist ein solches Feld verfügbar, sollte es Teil des Rückgabeparameters der Finder- und der SpecificFinder-Methode im Modell sein. Wenn ein Versionsfeld verfügbar ist, dann ruft der Synchronisierungsprozess sowohl die ID als auch die Version aus der externen Anwendung ab und führt nur dann SpecificFinder-Aufrufe aus, wenn die Version von der im Cache abweicht.
Aktivieren von Zuordnungen nur dann, wenn sie unbedingt notwendig sind
Enthält ein Abonnement aktivierte Zuordnungen, füllt der Synchronisierungsprozess den Cache mit zusammenhängenden Entitätsinstanzen. Dazu werden so viele Aufrufe der Associate-Methodeninstanz ausgeführt, wie Entitätsinstanzen für dieses Abonnement im Cache vorhanden sind. Dadurch werden die IDs der zusammenhängenden Entitätsinstanzen zurückgegeben. Anschließend wird der SpecificFinder für jede der zurückgegebenen IDs aufgerufen, um die anderen Felder abzurufen. Deshalb sollten Sie Zuordnungen nur dann aktivieren, wenn Sie sie unbedingt benötigen, da sie den Cache stark beanspruchen und die Leistung der Anwendung stark beeinträchtigen können.
Verwenden von zwei Abonnements statt eines, wenn zusammenhängende Daten benötigt werden
Wie im obigen Thema erwähnt, beanspruchen Zuordnungen den Cache sehr stark und können die Leistung der Anwendung erheblich beeinträchtigen. Wenn Sie zusammenhängende Daten in Ihrer Anwendung benötigen, sollten Sie erwägen, zwei Abonnements zu erstellen, eines für Customers und ein weiteres für Orders, anstatt Abonnementverknüpfungen zu verwenden. Dies führt dazu, dass weniger Aufrufe an die externe Anwendung ausgeführt werden und der Durchsatz der Anwendung sich erhöht.
Angeben der zu synchronisierenden Elemente mithilfe von expliziten Identitäten im Abonnement
Wenn Sie genau wissen, welche Elemente zu synchronisieren sind, können Sie dem Abonnement deren Identitäten einfach manuell hinzufügen. Dies erfolgt programmgesteuert auf wesentlich einfachere Weise, da Sie die serialisierte Identität in der XML-Abonnementdatei festlegen müssen.
Zum Abrufen der serialisierten Identität instanziieren Sie ein Identity-Objekt mit den entsprechenden Bezeichnerwerten und rufen seine Serialize-Methode auf. Weitere Informationen finden Sie in der Dokumentation zu Identity.Serialize().
Nachdem Sie die serialisierte Zeichenfolge der Identität abgerufen haben, fügen Sie sie in einem <Identity>-Tag innerhalb des <Identities>-Tags hinzu, wie in dem Beispiel weiter unten veranschaulicht (siehe Beispiel.)
Angeben von Filtern zum Reduzieren der von der Clientanwendung heruntergeladenen Datenmenge
Die einfachste Möglichkeit zum Optimieren der Synchronisierung besteht darin, die Menge der Daten zu verringern, die vom Client heruntergeladen werden. Dies erfolgt am einfachsten mithilfe von Filtern. Die vom Synchronisierungsframework unterstützten Filter, mit denen Sie die Anzahl der heruntergeladenen Elemente reduzieren können, sind Wildcard-, Comparison- und Limit-Filter. Beispielsweise können Sie mithilfe eines Wildcard-Filters alle Mitarbeiter herunterladen, deren Name mit dem Buchstaben "M" beginnen, indem Sie "M*" als Filterwert verwenden. Oder Sie können alle Kunden auswählen, deren Postleitzahl "98052" entspricht, indem Sie einen Vergleichsfilter anwenden. Mit einem Limit-Filter können Sie z. B. die Anzahl der Produkte auf 100 begrenzen.
Beispiel
Im Folgenden sehen Sie ein Beispiel für ein Abonnement, dessen explizite Identitäten über 11003 und 11020 liegen, und einen Filter, der nur Kunden mit einer CustumerID größer als 11050 zurückgibt.
<?xml version="1.0" encoding="utf-8"?>
<Subscription LobSystemInstanceName="AdventureWorksContosoLOBInstance"
EntityNamespace="AdventureWorksContoso" EntityName="Customer"
Name="AdventureWorksContosoCustomerSubscription" View="GetCustomerById"
IsCached="true" RefreshIntervalInMinutes="360"
xmlns="https://schemas.microsoft.com/office/2006/03/BusinessDataCatalog">
<Identities>
<Identity>i+yoAAA==</Identity>
<Identity>iDCsAAA==</Identity>
</Identities>
<Queries>
<Query Name="AdventureWorksContosoCustomerQuery"
MethodInstanceName="GetCustomers"
DefaultDisplayName="Customer Read List"
RefreshIntervalInMinutes="180" IsCached="true" Enabled="true">
<FilterValues>
<FilterValue FilterDescriptorName="MinCustomerId" FilterIndex="0"
Type="System.Int32">11050</FilterValue>
</FilterValues>
</Query>
</Queries>
</Subscription>
![]() |
---|
Es folgen einige wichtige Hinweise:
|