Question

J'ai eu un bref aperçu NHibernate et Linq2Sql. Je suis aussi l'intention d'avoir un coup d'oeil à Entity Framework.

La question qui est soulevée, quand je parle de ces ORM est de « Ils ne peuvent pas échelle », donc peuvent-ils? Google J'ai l'impression qu'ils sont en mesure d'évoluer, mais je suppose que, finalement, il doit y avoir un prix à payer, est-il la peine de payer pour une couche d'affaires plus riche plus simple.

Était-ce utile?

La solution

Ceci est une bonne question, et à mon avis, ils peuvent évoluer aussi bien que tout DAL personnalisé. Je ne l'ai utilisé NHibernate donc je vais concentrer uniquement sur elle et les fonctionnalités dont il dispose, qui peut aider à l'échelle d'un système.

  • Chargement en cours Lazy - Comme il supporte le chargement paresseux, vous pouvez éviter de charger des articles unnessecary. Bien sûr, vous devez regarder pour Select n + 1 problème mais il y a des choses dans le système pour empêcher cela.
  • chargement complet - Il y a plusieurs façons de récupérer des objets avec impatience que vous pourriez avoir besoin vous permettant d'éviter les voyages supplémentaires à SQL
  • .
  • cache de second niveau - NHibernate a un support pour un cache de second niveau qui peut être utilisé pour augmenter l'évolutivité en réduisant les voyages à la DB. Il existe plusieurs fournisseurs de support disponibles qui vous donnent une certaine flexibilité.
  • Écrivez votre propre SQL - Dans NHibernate, vous pouvez appeler des procédures stockées, ou fournir la ligne de requête SQL qui renverra vos entités. Cela vous permettra d'utiliser votre propre SQL lorsque le SQL généré ne coupe pas. Par exemple désireux de charger une auto de rejoindre l'arbre à l'aide d'une requête récursive.

Maintenant que nous avons dit, je pense qu'il est plus facile de modifier d'abord une couche de DAL personnalisée parce que vous êtes intime avec sa construction et peut affiner le réglage; Cependant, une bonne ORM fournira beaucoup de crochets qui vous permettent d'optimiser un peu. Vous avez juste besoin de passer un peu de temps à l'apprendre.

Je pense aussi que si vous avez une performance zone critique de code et vous ne pouvez pas obtenir votre ORM de travailler dans vos besoins alors pour cette petite zone de votre application, vous pouvez personnaliser construire votre propre couche DAL. Si vous utilisez un modèle de conception décent comme un référentiel créé par une usine, tout ce que vous devez faire est de swap sur la mise en œuvre de votre référentiel

Autres conseils

Hibernate Shards est en cours porté à NHibernate , ce qui permettra de mise à l'échelle horizontale.

Il y a aussi quelques trucs très cool comme celui-ci à mettre en œuvre sharding.

Donc, la réponse est oui, NHibernate échelle peut, d'une manière persistence-ignorante et entièrement transparente.

Il est tout simplement faux de dire que les applications construites dans un ORM n'échelle pas bien. Certes, il est arrivé avant que les devs imprudents ou paresseux abuser d'un ORM en écrivant du code SQL qui génère horriblement inefficace. Construire des applications performantes, il faut comprendre quelque chose à ce que toutes les belles abstractions ne fait sous le capot. Il ne faut pas beaucoup pour rester en dehors de ce piège cependant. L'utilisation d'un ORM ne signifie pas profileur ouverture jamais SQL ou NHibernate Profiler .

Et en ce qui concerne la demande que les SPs sont juste beaucoup plus rapide, lisez ce et cette . Et d'ailleurs, ORM (NHibernate, au moins) vous donner des moyens assez facile à utiliser si vous avez besoin SPs jamais.

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