天天看點

.NET平台開源項目速覽(15)文檔資料庫RavenDB-介紹與初體驗1.RavenDB概述與特性2.RavenDB安裝3.C#開發初體驗4.RavenDB資源

<b>閱讀目錄</b>

<a href="http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_RavenDB_Intro.html#_label0">1.RavenDB概述與特性</a>

<a href="http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_RavenDB_Intro.html#_label1">2.RavenDB安裝</a>

<a href="http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_RavenDB_Intro.html#_label2">3.C#開發初體驗</a>

<a href="http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_RavenDB_Intro.html#_label3">4.RavenDB資源</a>

    不知不覺,“.NET平台開源項目速覽“系列文章已經15篇了,每一篇都非常受歡迎,可能技術水準不高,但足夠入門了。雖然工作很忙,但還是會抽空把自己知道的,已經平時遇到的好的開源項目分享出來。今天就給大家介紹.NET平台下的文檔型資料庫RavenDB,雖然我以前也在小項目用過其他文檔型資料庫,但問題很多,小項目還可以,大項目就歇菜了。這個資料庫我關注了很久,最近一直在看它的文檔,是以把知道的先總結下來。

注意:RavenDB雖然商業化,但對社群是免費的,收費的是提供的其他服務。免費版本功能沒有限制,隻是使用者認證有限制。

    在這裡就不介紹所謂的關系型資料庫和NOSQL資料庫的差別和優缺點了,需要了解的可以自行搜尋。

.NET平台開源項目速覽(15)文檔資料庫RavenDB-介紹與初體驗1.RavenDB概述與特性2.RavenDB安裝3.C#開發初體驗4.RavenDB資源

    RavenDB是針對Windows/.NET平台而設計的開源文檔資料庫。RavenDB的出現将.NET應用與非關系資料庫連接配接到一起。資料以Shcema-less方式存儲,并直接通過HTTP、RESTful API或更友善的.NET用戶端API連接配接,.NET用戶端API使用LINQ操作RavenDB資料庫文檔存儲,是以你懂的,很舒服。RavenDB有.NET和JAVA版本,目前都在3.0。雖然RavenDB是開源的,但官方也提供了一些付費服務,可以參考官網,不過在國内這個還是算了,牆比較高,累。 下面我們進入正題,看看它的主要特性吧。

  主要說.NET API吧,在語言層面最主要的是LINQ支援,這一點估計是現在.NET NOSQL資料庫的标配了。其他就是擴充性和靈活的配置友善,API都提供了。值得注意的是,不管是.NET API還是JAVA API都是建立在它的REST API基礎上的。

  RavenDB具有非常高的可伸縮性。支援Multi-tenancy (多使用者資料隔離),以及不同的同步類型,還可以根據需要支援分區分片等等。可以對RavenDB進行擴充,目前已有的插件如:觸發器,編碼器/解碼器,任務排程,編譯擴充,分析器,加密,壓縮等等。Multi-tenancy翻譯有點别扭,這裡解釋一下:Multi-tenancy 使每個客戶組織都工作在一個為其定制好的虛拟軟體或者解決方案執行個體中,并認為自己在獨享環境。Multi-tenancy 與多軟體執行個體體系結構不同,多軟體執行個體結構擁有多個軟體執行個體并且每個執行個體服務于一個客戶組織,而 Multi-tenancy 結構是由一個軟體執行個體為所有的客戶組織提供服務。多軟體執行個體結構實體上隔離客戶組織的資料,而 Multi-tenancy 環境中的軟體或者解決方案邏輯上隔離客戶組織的資料和配置。 

        自動調優,智能索引,快速讀取優化,不會被鎖,多級緩存支援。 ACID事務支援,自動批處理,沒有鎖,用戶端和伺服器端連接配接保護。

        授權(文檔級,使用者/使用者組),身份驗證(使用Windows身份驗證或OAuth API來進行認證),資料加密(可以加密内容資料和索引資料),相容FIPS(聯邦資訊處理标準)。        

    全文搜尋(基于Lucene,可以使用Lucene的内置特性,支援自定義分詞器/分析器,與标準查詢無縫內建),RavenFS分布式虛拟檔案系統(同步,搜尋,版本控制,加密等) 

    說了這麼多,那總得幹點實際的對吧,無碼無真相,那麼就一起來看看如何搭建環境,以及搞個Demo玩玩呢。注意第一次玩下載下傳安裝包好一點。圖形化界面安裝,比較容易懂,我第一次搞的時候沒有用安裝方式。

.NET平台開源項目速覽(15)文檔資料庫RavenDB-介紹與初體驗1.RavenDB概述與特性2.RavenDB安裝3.C#開發初體驗4.RavenDB資源

    這種Windows安裝就很簡單了,不過多說,這裡隻說明幾個重點問題:

1.安裝之前安裝.NET Framework 4.0這是必不可少的哦;

2.RavenDB可以在不同的模式下運作,如Windows服務,IIS應用程式;

3.安裝的時候如果是Production/Test 是需要授權檔案的,因為生産環境需要完善的功能,授權檔案可以用郵件擷取:[email protected],商業授權是有服務支援的,當然是需要收費的。 如果是Development模式,則是對所有使用者開放的,沒有任何功能限制。我安裝的時候選擇的是Development。

.NET平台開源項目速覽(15)文檔資料庫RavenDB-介紹與初體驗1.RavenDB概述與特性2.RavenDB安裝3.C#開發初體驗4.RavenDB資源

4.如果開發機沒有安裝IIS,隻會安裝Windows 服務哦。我是Win10機器,由于基本不搞Web開發,是以IIS沒有安裝。

5.配置好,資料庫相關檔案路徑,安裝好後可以在系統服務裡面看到RavenDB服務已經在運作了。

.NET平台開源項目速覽(15)文檔資料庫RavenDB-介紹與初體驗1.RavenDB概述與特性2.RavenDB安裝3.C#開發初體驗4.RavenDB資源

進入RavenDB的Studio資料庫管理界面哦。BS形式的,還不錯,由于剛開始沒有資料庫,當你打開的時候,會提示你建立資料庫。如下圖: 

.NET平台開源項目速覽(15)文檔資料庫RavenDB-介紹與初體驗1.RavenDB概述與特性2.RavenDB安裝3.C#開發初體驗4.RavenDB資源

設定好後,如果選擇了加密,還會跳出加密選擇對話框,如下圖:

.NET平台開源項目速覽(15)文檔資料庫RavenDB-介紹與初體驗1.RavenDB概述與特性2.RavenDB安裝3.C#開發初體驗4.RavenDB資源

添加好後,就進入到了Studio的界面,看看總的,功能還很多呢,值得好好研究一下,今天先打住把,希望更多的人研究并分享。

  

.NET平台開源項目速覽(15)文檔資料庫RavenDB-介紹與初體驗1.RavenDB概述與特性2.RavenDB安裝3.C#開發初體驗4.RavenDB資源

  環境搞好了,那可以打開VS幹一票了。由于我們下載下傳的安裝包裡面沒有.NET驅動,不過NuGet把一切都準備好了。建立項目啥就不說了,打開NuGet,搜尋RevenDB.Client,如下圖:

.NET平台開源項目速覽(15)文檔資料庫RavenDB-介紹與初體驗1.RavenDB概述與特性2.RavenDB安裝3.C#開發初體驗4.RavenDB資源

  安裝上之後。引用命名空間,話說這裡很多新人不知道添加一個DLL後預設的命名空間是啥,這裡就多說一句吧。右鍵添加的DLL,選擇“ 在對象浏覽器中檢視”,然後會打開你選擇的DLL的相關結構,展開你要選擇的DLL,一目了然了。我們添加命名空間:

1

2

3

<code>using</code> <code>Raven.Client;</code>

<code>using</code> <code>Raven.Client.Document;</code>

<code>using</code> <code>Raven.Client.Indexes;</code>

還是老套路,我們可以不需要先去設計資料庫哦,好聽點的名字好像是叫Code-first,先把實體弄起來吧。

4

5

6

<code>public</code> <code>class</code> <code>Employee</code>

<code>{</code>

<code>    </code><code>public</code> <code>Int32 Id { </code><code>get</code><code>; </code><code>set</code><code>; }</code>

<code>    </code><code>public</code> <code>String Name { </code><code>get</code><code>; </code><code>set</code><code>; }</code>

<code>    </code><code>public</code> <code>DateTime Birth { </code><code>get</code><code>; </code><code>set</code><code>; }</code>

<code>}</code>

    注意,我們這裡為了便于查詢,加了Id字段,實際上,每個Document都是有一個預設的ID的,即使你不加也會給你配置設定值。看看簡單的新增修改代碼:

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

<code>static</code> <code>void</code> <code>Test1()</code>

<code>    </code><code>//建立預設的文檔對象,指定資料庫連接配接和資料庫名稱,如果沒有會自動建立</code>

<code>    </code><code>using</code> <code>(IDocumentStore store = </code><code>new</code> <code>DocumentStore{</code>

<code>                    </code><code>Url = </code><code>"http://localhost:8080/"</code><code>,</code>

<code>                    </code><code>DefaultDatabase = </code><code>"Northwind"</code><code>}</code>

<code>          </code><code>)</code>

<code>    </code><code>{</code>

<code>        </code><code>//初始化執行個體</code>

<code>        </code><code>store.Initialize();</code>

<code>        </code><code>//使用IDocumentSession對象對資料庫進行操作,先打開會話</code>

<code>        </code><code>using</code> <code>(IDocumentSession session = store.OpenSession()) </code>

<code>        </code><code>{</code>

<code>            </code><code>//建立一個實體對象</code>

<code>            </code><code>Employee employee = </code><code>new</code> <code>Employee</code>

<code>            </code><code>{</code>

<code>               </code><code>Name = </code><code>"Jok"</code><code>,Birth = DateTime.Now.AddYears(-10)</code>

<code>            </code><code>};</code>

<code>            </code><code>//直接将該對象儲存,會儲存到Employees的集合中去</code>

<code>            </code><code>session.Store(employee);</code>

<code>            </code><code>//如果不設定ID,會話将配置設定給對象一個Id,每個對象都預設有Id,即使實體類沒有該Id字段</code>

<code>            </code><code>Int32 employeeId = employee.Id; </code>

<code>            </code><code>//儲存所有變化到伺服器</code>

<code>            </code><code>session.SaveChanges();</code>

<code>            </code><code>//根據ID查詢</code>

<code>            </code><code>Employee loadedEmployee = session.Load&lt;Employee&gt;(employeeId);</code>

<code>        </code><code>}</code>

<code>    </code><code>}</code>

    我們看看資料庫管理界面,系統會預設建立Northwind資料庫。

.NET平台開源項目速覽(15)文檔資料庫RavenDB-介紹與初體驗1.RavenDB概述與特性2.RavenDB安裝3.C#開發初體驗4.RavenDB資源

    其他操作我們暫且就放過吧,有興趣大家自己嘗試一下,官方的文檔非常全面,系統大家看懂後能寫文章出來,這樣讓其他人少走彎路。

本文轉自葉小钗 h資料之巅部落格園部落格,原文連結:http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_RavenDB_Intro.html,如需轉載請自行聯系原作者