2010-09-09 37 views
2

當我們想要高效並且容易地將所有的數據(導入)加載到.NET中的業務對象中時,對於大型業務數據來說最好的數據格式(XML,數據庫等)是什麼?如何在.NET中高效,輕鬆地導入/導出大型業務數據?

我想一次加載所有數據並創建所有業務對象。 數據必須有一種「模式」才能讓其他人創建它。

另請注意,我想簡化從數據的特定模式(可以是XSD模式,數據庫模式等)創建業務類的過程。 我曾嘗試兩種方法,這兩者都不被證明是完全令人滿意的:

  1. XMLXSD.EXE或等效的工具(如Xsd2Code)來生成業務類和映射。對於大數據,XML存儲的大小成爲一個問題。

  2. 數據庫(SQL Server CE的),借力實體框架創建業務類和映射:在第一次測試,以提高數據庫的大小,EF是在嚴重的麻煩(性能問題和出內存異常)。

我想實現(裝載大量的業務數據到內存一氣呵成)似乎什麼「標準」(或者是不是真的?),但我無法找到一個有效的和乾淨的方式來做到這一點。

+2

數據庫用於存儲**(和操作)數據 - 對於**數據交換(導入/導出,ETL等)而言,XML非常適用。根據需要使用每一個(例如,do ** not **使用XML作爲存儲) – 2010-09-09 14:34:42

+0

您需要一個數據存儲?你甚至還沒有設置數據庫嗎? – Silkster 2010-09-09 14:37:03

+0

爲了澄清一些事情,我們測試了兩種解決方案:從XML和SQL Server CE文件中檢索數據。這些文件是由其他人創建的,我們需要將所有數據加載到內存中以執行計算。也許術語「數據存儲」是誤導性的。我們實際上正在交換數據。 – Moyama 2010-09-09 14:46:33

回答

0

在.NET框架中查看XML Serialization。我在數據交換項目中使用它,.NET支持使用很少的代碼序列化和反序列化對象中的信息。這可能是你想要的路徑。

編輯:我看到你也玩過xsd.exe,你可以使用數據庫將XML存儲在表格中的一列中以方便檢索。我們在當前的項目中也是這樣做的。我們從第三方源接收一些XML,因此我們將它存儲在一個表中,根據模式進行驗證,然後使用xsd.exe方法將它讀出到.xsd文件生成的.NET對象中。我不確定您的數據有多大,但這種方法對我們來說效果很好。

+0

謝謝你的回答。實際上,我也測試了DataContract序列化,因爲可以很容易地從我們的業務類中獲取XSD模式。由於數據文件是由其他人(不一定使用.NET)創建的,因此這個想法僅僅是爲他們提供XSD文件,但是如前所述,XML文件並不足夠(大數據),並且以這種方式生成的XSD比定製產品更爲複雜。 – Moyama 2010-09-09 15:24:49

1

你的問題其實有點含糊,所以我只能用我的直覺來回答。存儲數據用於數據庫。您正在談論業務對象,因此使用OR/M工具是合理的選擇。既然你在.NET中,實體框架是一個合理的選擇。

在我看來,實體框架應該不會引起其他解決方案不會給你的內存問題。我認爲你的OOM問題是由於不當使用該工具或其他問題造成的。如果您仍然遇到問題,請在SO處詢問關於此問題的具體問題。

祝你好運。

+0

嗨,我也認爲EF不應該引起任何問題,也許我會濫用它。我使用EDMX設計器來完成OR映射。在實際的測試中,我只需創建objectcontext並使用linq將數據檢索到實體,這些都是直接的東西,但我遇到了性能問題。 – Moyama 2010-09-09 15:31:32

+0

性能問題是可能的。 EF不是同類產品中最快的,但是大多數性能問題都可以解決。我建議你在Stackoverflow上發佈一個具體的問題(用代碼示例顯示你的問題)。 – Steven 2010-09-09 15:40:35

0

如果你有XML和SQLDatabases,你可以試試LINQ。使用SQLMetal程序自動生成對應於您的SQLDatabase表的類。如果你在DB中有關係,它們也被保存在由SQLMetal生成的對象模型中。

+0

嗨,這基本上就是我所做的,讓實體框架生成業務類和OR映射。我的問題是,在我的測試中,EF在加載大量數據時表現不佳。 – Moyama 2010-09-09 15:34:24

+0

數據有多大? – watbywbarif 2010-09-09 15:50:58

相關問題