2010-07-31 84 views
7

如果這個問題看起來很常見,我很抱歉,我對此網站和幾個谷歌搜索進行了快速搜索,找不到令人滿意的答案。磁盤上的數據庫存儲,最佳實踐

我的問題是這樣的;

我只是一個3 - 4年的軟件開發人員。這似乎足以讓我自己回答這個問題,但在我所有的時間裏,我從來都不需要開發軟件,而數據存儲的主體不需要在聯機數據庫中。但是,這一次,我的最新發展只需要將其數據存儲到磁盤。

實際數據本身很輕。代碼中的主要資產將是一個只有少數基於字符串的屬性的類,它必須被持久化。我最初的想法是簡單的序列化。在應用程序關閉時,新資產將被簡單地序列化並作爲文件存儲在磁盤上。我也可能爲了備份的目的(或者如果它是某種更好的選擇序列化類)XML文件將是適當的。

我想不出任何這些方法的明顯缺點,正是這個事實導致我公開提出這個問題。根據我的經驗,對於沒有缺點的問題很少有解決辦法。

回答

3

序列化(二進制或XML)適用於少量數據。這種方法的問題是當你得到大量的數據時(你可能需要查詢)。

如果您在Windows平臺上並且需要正確的數據庫,那麼可以使用Windows自帶的嵌入式數據庫引擎 - ESENT。它是Exchange的後盾商店和RavenDB

Here是它的.NET包裝庫。

ManagedEsent提供對ESENT的管理訪問,ESENT是Windows原生的可嵌入數據庫引擎。 ManagedEsent使用屬於Microsoft Windows的esent.dll,因此沒有額外的非託管二進制文件可供下載和安裝。

0

另一個嵌入式數據庫選項是Sql Server Compact Edition。這個is v4的最新版本似乎比以前的版本有了很大的改進。

它在功能上等同於使用XML文件或訪問數據庫,甚至是普通的舊文本文件,因爲您無需在應用程序的計算機上運行或安裝任何特殊的Sql Server服務運行。

1

最輕量級的解決方案當然是使用XML和序列化。這樣做的主要優點是它非常簡單,只需很少的代碼,並且可以使用文本編輯器輕鬆進行編輯。這樣做的另一個優點是可以有多個文件,並且可以很容易地從PC傳輸到PC。

這是一個不錯的tutorial on XML serialization。但是,如果您的應用程序要讀取,寫入和更改數據,並且只有一個數據源,那麼使用輕量級數據庫會更好。很多人喜歡SQLite,而我個人更喜歡Firebird

看到這個question for using SQLite with C#see here for information for using Firebird with .net

0

我一直在一個項目中使用Sqlite,它工作得很好,它也很容易使用,但使用Sqlite時要注意的一點是,雖然它被設計用於單用戶環境,所以如果你把它作爲數據庫例如,你可能會發現,它會在絲毫負載的奮鬥網站的後端..

退房此鏈接爲C#包裝: http://sqlite.phxsoftware.com/

我也使用NHibernate和NHibernate.Linq與數據進行交互,你可以得到兩個兼容的版本:http://www.dennisdoomen.net/2009/07/nhibernate-210-ga-with-linq-and-fluent.html

NHibernate.Linq允許你使用那些漂亮的LINQ查詢語法上的SQLite的分貝:

變種ONEPIECE從s在session.Linq(),其中s.Name == = 「海賊王」 中選擇S;