La mia azienda sta procedendo alla riscrittura di un'applicazione esistente da zero. Questa applicazione, tra le altre attività, esegue query SQL complesse su dati di ordini e fatture per produrre report di vendita. Le query vengono create dinamicamente in base a quali criteri vengono selezionati dall'utente, quindi possono essere piuttosto complessi se vengono selezionati molti criteri. Attualmente, le prestazioni sono decenti, ma non eccezionali.Prestazioni ORM (specialmente NHibernate) per query complesse
Ora, per la nuova versione, vorremmo utilizzare un ORM, probabilmente NHibernate perché apparentemente è l'unico che supporta Oracle Lite (l'applicazione utilizza Oracle o Oracle Lite, a seconda che sia in esecuzione in connessione o disconnessa modalità). Ma sono preoccupato per le prestazioni delle query generate da NHibernate. Ho lavorato con altri ORM (Linq to SQL, Entity Framework), ma le query erano piuttosto semplici, quindi non c'era alcun problema di prestazioni.
Quindi, prima di prendere una decisione sull'utilizzo di un ORM o stare con SQL semplice, mi piacerebbe sapere quanto bene questi strumenti gestiscono scenari come join esterni, sottoquery, ecc ... Pensi che un ORM (soprattutto NHibernate) è adatto per l'uso nello scenario di segnalazione descritto sopra? Dovrei preoccuparmi delle prestazioni per query complesse?
Qualsiasi commento sarebbe molto apprezzato
Alcuni altri link: http://fabiomaulo.blogspot.com/2009/09/why-don-choose-nhibernate.html e http: //fabiomaulo.blogspot .com/2009/08/nhibernate-perfomance-analisys.html :) –
Alex, grazie, questo sito sembra davvero promettente! Ora ho bisogno di dedicare un po 'di tempo alla dissezione dei risultati del test;) –
Per quanto riguarda le query complesse: qui tutto dipende dalla qualità del traduttore LINQ. Il traduttore di NH LINQ sembra completamente raddrizzato quando funziona. Nota che questi test mostrano cosa un particolare ORM _can_ traduce, ma non _how_. I test delle prestazioni sono progettati per query semplici, quindi non dovresti studiarli seriamente. Sebbene ad es. I test di paging mostrano alcune differenze nella qualità della traduzione: alcuni provider usano sempre ROWNUMBER invece di TOP, e questo è il motivo principale per cui perdono questo test. –