Partager via


Procédure : améliorer les performances de la solution Business Connectivity Services lors de l’utilisation du cache

Dernière modification : mercredi 30 juin 2010

S’applique à : SharePoint Server 2010

Dans cet article
Utilisation d’un champ de version pour réduire les accès à la source de données externe
Activer les associations uniquement en cas de nécessité
Si des données liées sont indispensables, utiliser deux abonnements au lieu d’un seul
Spécifier les éléments à synchroniser en utilisant des identités explicites dans l’abonnement
Spécifier des filtres pour réduire la quantité de données téléchargées par l’application cliente
Exemple

Lors de la conception d’une solution Business Connectivity Services qui utilise le cache, gardez à l’esprit les meilleures pratiques suivantes pour optimiser l’utilisation du cache et garantir des performances optimales pour votre application :

  • Utilisez un champ de version, le cas échéant, pour réduire les accès à l’application externe.

  • N’activez les associations que si elles sont nécessaires à l’application et assurez-vous que les utilisateurs finaux n’activent pas les associations par erreur.

  • Si vous avez besoin de données liées, utilisez deux abonnements au lieu d’un seul abonnement avec une association à un abonnement.

  • Spécifiez les éléments à synchroniser en utilisant des identités explicites dans l’abonnement.

  • Spécifiez des filtres pour réduire la quantité de données téléchargées par l’application cliente.

Examinons en détail chacune des meilleures pratiques ci-dessus.

Utilisation d’un champ de version pour réduire les accès à la source de données externe

En utilisant un champ de version dans la source de données externe, vous pouvez considérablement réduire le nombre d’appels à la source de données externe. Un champ de version peut être un champ numérique incrémentiel qui indique la version de l’instance d’entité ou un horodatage LastModified qui spécifie le moment où l’instance d’entité a été mise à jour pour la dernière fois dans la source de données externe. Si un tel champ est disponible, il doit faire partie du paramètre de retour des méthodes Finder et SpecificFinder du modèle. Si un champ de version est disponible, le processus de synchronisation obtient à la fois l’ID et la version de l’application externe, et effectue uniquement des appels à SpecificFinder si la version diffère du contenu du cache.

Activer les associations uniquement en cas de nécessité

Si un abonnement contient des associations activées, le processus de synchronisation remplit le cache avec les instances d’entité liées. Pour ce faire, il effectue autant d’appels à l’instance de méthode Associate qu’il y a d’instances d’entité dans le cache pour cet abonnement. Cela renvoie les ID des instances d’entité liées. Il appelle ensuite SpecificFinder pour chacun des ID renvoyés afin de récupérer les autres champs. Par conséquent, vous ne devez activer les associations que si vous en avez absolument besoin, car la charge de traitement du cache est très élevée et cela peut affecter gravement les performances de l’application.

Si des données liées sont indispensables, utiliser deux abonnements au lieu d’un seul

Comme indiqué dans la rubrique ci-dessus, les associations augmentent fortement la charge de traitement du cache et peuvent gravement affecter les performances de l’application. Si vous avez besoin de données liées dans votre application, créez deux abonnements, un pour les clients et un autre pour les commandes, au lieu d’utiliser des associations d’abonnements. Cela entraîne une réduction du nombre d’appels à l’application externe et une augmentation du débit de l’application.

Spécifier les éléments à synchroniser en utilisant des identités explicites dans l’abonnement

Si vous savez exactement quels sont les éléments à synchroniser, il vous suffit d’ajouter chacune de leurs identités à l’abonnement. Cela s’avère beaucoup plus simple à réaliser par programmation, car vous devez placer l’identité sérialisée dans le fichier XML d’abonnement.

Pour obtenir l’identité sérialisée, vous devez instancier un objet Identity avec les valeurs d’identificateur appropriées, puis vous devez appeler sa méthode Serialize. Pour plus d’informations, voir la documentation relative à Identity.Serialize().

Une fois que vous disposez de la chaîne sérialisée de l’identité, vous devez l’ajouter à la balise <Identity> au sein de la balise <Identities>, comme indiqué dans un exemple figurant plus loin dans cette rubrique (voir Exemple).

Spécifier des filtres pour réduire la quantité de données téléchargées par l’application cliente

La manière la plus évidente d’optimiser la synchronisation est de réduire la quantité de données téléchargées par le client, et la méthode la plus simple pour y parvenir est d’utiliser des filtres. Les filtres pris en charge par l’infrastructure de synchronisation afin de réduire le nombre d’éléments téléchargés sont Wildcard, Comparison et Limit. Par exemple, vous pouvez utiliser un filtre Wildcard pour télécharger tous les employés dont les noms commencent par la lettre « M » en utilisant « M* » comme valeur de filtre. Vous pouvez également sélectionner tous les clients dont le code postal est « 98052 » à l’aide d’un filtre Comparison. Un filtre Limit permet de limiter le nombre de produits à 100.

Exemple

Voici un exemple d’abonnement dont les identités explicites sont supérieures à 11003 et 11020, et un filtre qui renvoie uniquement les clients pour lesquels CustomerID est supérieur à 11050.

<?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> 

Notes

Les remarques suivantes sont importantes :

  • Vous devez définir les filtres utilisés par le fichier d’abonnement du modèle BDC, et le système externe doit être capable de les prendre en charge.

  • En outre, lors de la mise à jour manuelle d’un modèle BDC existant, vous devez incrémenter la version du type de contenu externe modifié pour avoir la garantie que les modifications ne seront pas ignorées au cours du déploiement.