我正在構建一個解決方案,從數據庫中檢索大量數據(5k到10k記錄)。我們現有的數據訪問層使用Fluent NHibernate,但是我害怕我會通過提供代表數據庫實體的對象模型來產生大量開銷。使用流利NHibernate檢索大型數據集
我可以簡單地檢索一個ADO數據集嗎?
我正在構建一個解決方案,從數據庫中檢索大量數據(5k到10k記錄)。我們現有的數據訪問層使用Fluent NHibernate,但是我害怕我會通過提供代表數據庫實體的對象模型來產生大量開銷。使用流利NHibernate檢索大型數據集
我可以簡單地檢索一個ADO數據集嗎?
是的,你應該關心這個表現。你可以看看使用NHibernate的IStatelessSession功能。但是,這可能不會給你你正在尋找的表現。雖然我從2.1.2GA開始就沒有使用過NH,但是我認爲在批量操作方面他們不太可能大大提高NH的性能。直截了當地說,當涉及到批量操作時,NH只是吸引(而且大多數情況下是大多數ORM)。
問:我可以簡單地檢索一個ADO數據集嗎?
當然可以。僅僅因爲你使用的是NHibernate並不意味着你不能新建一個ADO.NET連接並在原始數據庫中創建。
儘管我討厭數據表和數據集,但您可能要考慮使用它們,而不是添加映射/創建與您的10K行數據相關聯的對象的開銷。
可以使用 「標量查詢」,這實際上是本機SQL查詢返回對象[](一個對象每行[])的列表:http://nhibernate.info/doc/nh/en/index.html#d0e10794
:從NHibernate的文檔sess.CreateSQLQuery("SELECT * FROM CATS")
.AddScalar("ID", NHibernateUtil.Int64)
.AddScalar("NAME", NHibernateUtil.String)
.AddScalar("BIRTHDATE", NHibernateUtil.Date)
實施例
根據您需要多少性能,有幾個選項。沒有什麼比使用sqldatareader更好,因爲這就是每個.NET ORM實現的底層。除了速度最快之外,如果您不需要在查詢後保存所有記錄的列表,它可能會佔用更少的內存。
現在至於你的表現擔憂,5k-10k的記錄並不是那麼高。我之前已經從nhibernate中拉出了一百萬行,但顯然這些記錄並不是很大,而且是針對一個案例的。如果你在高流量的網站上這樣做,那麼當然如果你遇到了瓶頸,你將不得不更加高效。如果你在考慮數據集,我會建議改爲嘗試Massive,因爲它應該比DataSet/Table更高效,並且更方便。