天天看點

[置頂].NET平台開源項目速覽(3)小巧輕量級NoSQL檔案資料庫LiteDB1.LiteDB初步介紹2.LiteDB使用基本案例3.LiteDB的技術細節4.資源其他

    今天給大家介紹一個不錯的小巧輕量級的nosql檔案資料庫litedb。本部落格在2013年也介紹過2款.net平台的開源資料庫:

    上面2個資料庫我的實際的項目中用過,還不錯。當然資料量很小,主要是客戶比較變态,必須要用xml檔案儲存,就想到了,另外ndatabase隻是自己覺得好玩,也用了一下。

提示:沒有x86,x64之分,可以anycpu使用。4.5版本也可以使用,如果需要專門的4.5版本,可以自己編譯,另外mono的問題,官方沒有提到,應該是暫時不支援,自己也沒有環境,不好測試,希望有環境的朋友,可以用簡單代碼測試一下。

    主要特點有(翻譯官方介紹,如有不準确,請指正):

1.nosql檔案存儲。這是和傳統關系型資料庫的主要差別;支援實體類的字段更新;

2.類似mongodb的簡單api;

3.完全使用c#代碼,在.net 4.0環境下編寫,核心dll小巧,隻有168k;

4.支援acid事務處理;

5.可以進行寫入失敗的恢複;

6.存儲到檔案或者資料流中(類似mongodb的gridfs);

7.類似sqlite的單一檔案存儲;

8.支援檔案索引,可以進行快速搜尋;可以直接存儲檔案;

9.支援linq查詢;【這也許是c#編寫最直接的好處】;

10.支援指令行操作資料庫,官方提供了一個shell command line;

11.完全開源和免費,包括商業使用;

  雖然小巧,但也不是萬能的,litedb給出了幾個可能或者比較适合使用的場景。大家可以根據實際情況進行或者根據需要進行測試,看是不是自己需要的: 

1.桌面或者本地小型的應用程式

2.小型web應用程式

3.單個資料庫賬戶或者單個使用者資料的存儲

4.少量使用者的并發寫操作的應用程式

    上面隻是基本介紹,先從搞一個簡單的案例介紹如何使用。大家可以感覺一下。如果要具體使用,就好好研究下官方的檔案。本文下面幾節也将大概介紹一下litedb的相關原理和技術細節。有空我會做一個大資料下的測試,看看如何。這裡隻是為了介紹給大家研究而已。

    為了例子需要,我們建立一個簡單的實體類,如下面所示,隻包括幾個基本的屬性資訊。

    使用過程首先要添加dll應用,以及引入命名空間:

    下面是測試代碼,會在目前目錄下建立一個sample.db的資料庫檔案:

    上述過程很清楚,根據注釋了解幾乎不用費神。

  例子的使用簡單,但其實還不夠全面,本節就稍微翻譯一下litedb官方提供的一些技術資料和文檔。讓你對litedb更加了解和易于使用。

  litedb是雖然單個檔案類型的資料庫,但是資料庫有很多資訊,例如索引,集合,檔案等。為了管理這些資訊,litedb實作了資料庫頁的概念。頁 是一個擁有4096 位元組的 存儲相同資訊的位址塊。頁 也是操作磁盤檔案(讀寫)的最小單元。litedb有6種頁類型。其作用也不一樣,分布是:header page,collection page,index page, data page,extend page,empty page。鑒于篇幅較大,這裡隻介紹重要的data page。其他幾個頁面的作用看檔案也很容易。data page的作用是存儲核心的資料,是以序列化後的bson格式來存儲。值得注意的是,如果存儲的資料太大,超過page大小,資料塊就會使用一個指針指向extend page。

  在上面的代碼中,我們初始化資料庫是這樣的:

  這種情況比較好用,可以打開或者建立新的資料庫,同樣也可以使用連接配接名稱來擷取,例如:

  這樣會直接從connectionstrings找到這個名稱的連接配接。包括了檔案名稱,使用模式,以及版本資訊。一般情況下直接使用第一種即可。

  litedb的資料庫連接配接完整形式是:filename=c:\path\mydb.db; journal=false; version=5  

  litedb的查詢必須在相關的查詢字段上使用索引,如果沒有索引,會預設去建立索引。上面例子中就是建立字段的索引,并查詢。litedb中查詢有2種方法:

1.使用靜态的幫助類query;<code></code>

2.使用linq方式,就是類似demo的方法;

  litedb使用query的查詢方式有以下一些方法,詳細講解幾個重要的,其他幾個大家了解一下,也應該不難,如果有不準确的地方,還請指正: 

query.all 傳回所有的資料,可以使用指定的索引字段進行排序

query.eq 查找傳回和指定字段值相等的資料

query.lt/lte 查找&lt; 或 &lt;= 某個值的資料

query.gt/gte 查找&gt; 或 &gt;= 某個值的資料

query.between 查找在指定區間範圍内的資料

query.in - 和sql的in類似吧,查找和清單中值相等的資料

query.not - 和eq相反,是不等于某個值的資料

query.startswith 查找以某個字元串開頭的資料

query.contains 查找保護某個字元串的資料,這個查詢隻掃描索引

query.and 2個查詢的交集

query.or 2個查詢結果的并集

  看看實際代碼:

  如圖,文法是左邊是字段,右邊是值。注意litedb不支援這種表達式:creationdate == duedate。

  下面介紹使用linq的查詢的幾個主要方法:

findall: 查找表或者集合中所有的結果記錄 findone:傳回第一個或者預設的結果 findbyid: 通過索引傳回單個結果 find: 使用查詢表達式或者linq表達式查詢傳回結果

   看看幾個例子:

   當然還有一些方法如:count() , exists(),min() , max()等方法。。比較好了解。看看linq表達式的查詢案例:

  litedb的介紹就基本完成了,實際還有很多技術細節在官方文檔中。比較簡單也好了解,不再翻譯。這裡提供一個2015年5月25日下載下傳的源碼版本和例子源代碼。

  同樣,官方沒有提供離線版的chm文檔,我手動制作了一份,提供下載下傳,如下圖:

特别提醒:幫助檔案chm打開顯示不了請右鍵,屬性,解除鎖定。。。路徑,檔案名都不能含有特殊字元,否則也不能打開。。常見問題,有網友問起,提醒一下。

  

[置頂].NET平台開源項目速覽(3)小巧輕量級NoSQL檔案資料庫LiteDB1.LiteDB初步介紹2.LiteDB使用基本案例3.LiteDB的技術細節4.資源其他