Frage

Ich habe einen kurzen Blick auf NHibernate und Linq2Sql worden ist. Ich bin die Absicht, auch einen Blick auf Entity Framework zu haben.

Die Frage, die aufgeworfen wird, wenn ich diese ORM reden wird „Sie können nicht skalieren“, so kann sie? Von Google habe ich den Eindruck sie in der Lage ist, gut zu skalieren, aber letztendlich glaube, ich muß es ein Preis, zu zahlen Lohnt es sich für eine reichere einfachere Business-Schicht zu zahlen.

War es hilfreich?

Lösung

Das ist eine gute Frage, und meiner Meinung nach können sie genauso gut wie jede benutzerdefinierte DAL skalieren. Ich habe nur nHibernate so wird konzentriere ich mich nur darauf verwendet, und die Features, die es, die ein System skalieren kann helfen hat.

  • Lazy Loading-- Da es eine träges Laden unterstützt vermeiden Sie können alle unnötigen Elemente geladen werden. Natürlich müssen Sie für das Select n + 1 Problem dort in dem System dies zu verhindern sind die Dinge jedoch aufpassen.
  • Eager Fetching - Es gibt verschiedene Möglichkeiten, um eifrig Objekte zu holen, die Sie Ihnen zusätzliche Fahrten zu SQL zu vermeiden, müssen möglicherweise erlauben
  • .
  • Second Level Cache - nHibernate hat Unterstützung für einen zweiten Level-Cache, die verwendet werden können, um die Skalierbarkeit zu erhöhen, indem sie Ausflüge in die DB zu reduzieren. Es gibt verschiedene Trägeranbietern zur Verfügung, die Ihnen eine gewisse Flexibilität geben.
  • Schreiben Sie Ihre eigene SQL - In nHibernate können Sie gespeicherte Prozeduren aufrufen, oder die SQL-Abfrage inline, die Ihre Einheiten zurück. So können Sie Ihre eigene SQL verwenden, wenn die generierten SQL es nicht schneiden. Zum Beispiel eifrig einen Selbstverbindungsbaum mit einer rekursiven Abfrage geladen werden.

Jetzt mit dieser sagte, ich denke, es ist einfacher, zunächst eine benutzerdefinierte DAL Schicht zwicken, weil Ihr mit seiner Konstruktion intim sind und die Feinabstimmung können; jedoch wird eine gute ORM viel Haken bieten, mit denen Sie einiges zu optimieren. Sie brauchen nur etwas Zeit zu verbringen, es zu lernen.

Ich glaube auch, dass, wenn Sie eine Performance kritischen Bereich des Codes haben, und Sie nicht Ihre ORM innerhalb Ihrer Anforderungen erhalten können, dann können Sie für diese winzigen Bereich Ihrer Anwendung arbeiten Gewohnheit Ihre eigene DAL Schicht aufzubauen. Wenn Sie ein anständiges Design-Muster wie ein Repository von einer Fabrik erstellt verwenden, dann alles, was Sie tun müssen, ist die Swap der Umsetzung Ihrer Repository

Andere Tipps

Hibernate Shards wird portiert NHibernate , die für die horizontale Skalierung ermöglichen.

Es gibt auch einige sehr coole Hacks wie dieses sharding zu implementieren.

So ist die Antwort ja ist, kann NHibernate skaliert, in einem persistance-unwissend und voll transparent.

Es ist einfach falsch zu sagen, dass in einem ORM gebaut Apps nicht gut skalieren. Sicherlich ist es geschehen, bevor dass nachlässig oder faul Devs ein ORM missbrauchen, indem sie Code schreiben, der schrecklich ineffizient SQL erzeugt. Der Aufbau performante Anwendungen bedeutet Verständnis etwas über das, was all die schönen Abstraktionen eigentlich tun unter der Haube. Es braucht nicht viel aus dieser Fall jedoch zu bleiben. ein ORM bedeutet nicht, nie SQL Profiler zu öffnen oder NHibernate Profiler .

Und in Bezug auf die Behauptung, dass SPs sind nur eine ganze Menge schneller, lesen Sie diese und dieser . Und außerdem ORMs (NHibernate, zumindest) gibt Ihnen recht einfache Möglichkeiten SPs zu verwenden, wenn Sie jemals brauchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top