Lecture seule fonction de recherche. Procédures stockées ou IQueryable avec Poços et Ef 4.0

StackOverflow https://stackoverflow.com/questions/1830598

Question

Nous avons une fonctionnalité de recherche qui peut renvoyer des dizaines de milliers de résultats de la db bien qu'il ne chercher les lignes nécessaires pour afficher en exemple 10 premiers enregistrements. Lorsque la page suivante est demandée, nous avons atteint la db à nouveau. Il recherche notre base de données basée sur un ensemble de variables et cette recherche peut être affinée qui se traduira par un autre coup de base de données. La requête est assez complexe.

Nous avons examiné différentes façons de le faire qui cadrent avec notre architecture globale.

La première consiste à utiliser une procédure stockée, peuplant probablement une liste d'entités. Cette procédure stockée pourrait rapidement devenir grand et difficile à manier, mais aura de meilleures performances.

La deuxième façon est d'utiliser LINQ to SQL ou une entité Entités mises avec Entity Framework 4.0 et créer la requête dans le code à travers notre couche conceptuelle et peupleraient objets POCO via IQueryable. Cela présente les avantages pour nous de:

  • Abstraction : Nous utilisons EF dans d'autres endroits dans l'application il nous aimerions recherche sur le modèle si Abstraite possible.
  • Sécurité Type et nous pouvons enchaîner les filtres IQueryable pour faire proprement ce que nous voulons faire dans un objet chemin oirentated

Notre principale préoccupation de cette approche est la performance. Nous espérons utiliser Parrlel aux entités et LINQ sommes en mesure de jeter plus de matériel à si nécessaire. Un petit coup de performance est OK pour un modèle de développement plus propre.

Nous vous serions reconnaissants de la pensée et des recommandations des gens sur cette .... Nous sommes nouveaux à beaucoup de ces techniciens seraient donc que d'entendre les expériences des peuples.

Était-ce utile?

La solution

Je l'ai fait quelques tests de performance et à l'aide d'une procédure stockée dans EF4.0 peuplant une entité ou un type complexe est presque identique à la performance à un SP accessible via ADO.NET donc nous allons essayer cette méthode. EF utilise construit dans l'interrogation était environ deux fois plus lent que nous allons utiliser dans cette performance SPs situation critique.

Autres conseils

Vous avez dit que le but ultime est la performance. Cela signifierait SQL et ADO.NET directement à moi. Ajout d'EF au-dessus de celui-ci est une énorme quantité de frais généraux pour quelque chose qui n'a pas besoin d'un suivi de l'état, aucune capacité de mise à jour, et même pas utiliser tous les résultats.

Ecrire SQL sur la base de données et le laisser faire la recherche de personnes, autant que possible. Ne jamais tirer 1000 d'entrées de lorsque vous prévoyez de les jeter. Vous pouvez également ne pas profiter de votre pouvoir de serveurs avec EF pour des choses comme FTS, ou indice d'optimisation de pointe. Vous êtes à la merci du temps d'exécution EF, ce qui est générique et ne sait pas comment tirer parti du matériel ou des serveurs spécifiques.

Vous devriez également regarder une couche de mise en cache vous savez que l'utilisateur va interroger le jeu suivant un certain pourcentage du temps. Il est moins cher pour obtenir 2x les premiers résultats et mettre en cache la seconde moitié quand ils appellent le dos. Sinon, vous les viennent à échéance à un moment donné.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top